d只匹配0-9位数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了 d只匹配0-9位数?相关的知识,希望对你有一定的参考价值。

据我所知,d应匹配非英文数字,​​例如۱۲۳۴۵۶۷۸۹۰但它在javascript中无法正常工作。

看到这个jsFiddle:http://jsfiddle.net/xZpam/

这是正常行为吗?

答案

JavaScript不支持Unicode正则表达式匹配(并且它远非唯一的语言,这是真的)。

http://www.regular-expressions.info/unicode.html

另一答案

似乎JavaScript不支持这一点(以及RegExp中语言的其他弱点)。然而,有一个名为XRegExp的库,它有一个unicode插件,通过p{}类别定义支持unicode。例如,如果您使用p{Nd}而不是d,它将匹配数字:

<script src="xregexp-all.js" type="text/javascript"></script>
<script type="text/javascript">
    var englishDigits = '123123';
    var nonEnglishDigits = '۱۲۳۱۲۳';

    var digitsPattern = XRegExp('\p{Nd}+');
    if (digitsPattern.test(nonEnglishDigits)) {
        alert('Non-english using xregexp');
    }

    if (digitsPattern.test(englishDigits)) {
        alert('English using xregexp');
    }
</script>

EDIT:

使用p{Nd}而不是p{N},因为看起来d相当于非ECMA Script Regex引擎中的p{Nd}。谢谢你去Shervin指出来。另见fiddleShervin

另一答案

在Mozilla Firefox(qazxsw点)的文档中,您会发现:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp
另一答案

根据d Matches a digit character in the basic Latin alphabet. Equivalent to [0-9]. 的说法,d相当于[0-9]

另一答案

来自MDN。 MDN

匹配基本拉丁字母表中的数字字符。相当于[0-9]。

另一答案
RegEx Test

来自Matches a digit character. Equivalent to [0-9]. For example, /d/ or /[0-9]/ matches '2' in "B2 is the suite number."

另一答案

是的,MDN仅将Ascii数字d0匹配是正常和正确的。权威参考是9。读取并不是特别容易,但是第15.10.2.12节(CharacterClassEscape)指定ECMAScript standard表示“包含字符0到9的十个元素字符集”。

另一答案

是的,使用d与JavaScript中的非英语数字不匹配,但是像JavaScript的其他奇怪部分一样,你仍然可以在JavaScript中检查非英语数字(例如波斯语数字),使用类似下面的代码:

d

以上是关于 d只匹配0-9位数?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式(/[^0-9]/g,'')中的"/g"是啥意思 ?????

正则表达式 只能出现一次或0次

python 正则表达式

正则表达式只使用awk打印匹配的字符串而不是整行

JAVA正则表达式代码

正则表达式