\ d只匹配0-9位数?

时间:2013-05-21 05:46:37

标签: javascript regex unicode internationalization

据我所知,\d应匹配非英文数字,​​例如۱۲۳۴۵۶۷۸۹۰但它在JavaScript中无效。

请参阅此jsFiddle:http://jsfiddle.net/xZpam/

这是正常行为吗?

8 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

似乎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>

编辑:

使用\p{Nd}代替\p{N},因为\d在非ECMA Script Regex引擎中似乎等同于\p{Nd}。感谢Shervin指出。另请参阅fiddle Shervin。{/ p>

答案 2 :(得分:3)

在Mozilla Firefox(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].

答案 3 :(得分:2)

根据{{​​3}},

\d相当于[0-9]

答案 4 :(得分:1)

来自MDN。 RegEx Test

  

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

答案 5 :(得分:1)

Matches a digit character. Equivalent to [0-9].

For example, /\d/ or /[0-9]/ matches '2' in "B2 is the suite number."

来自MDN

答案 6 :(得分:1)

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

答案 7 :(得分:0)

是的,使用\d与JavaScript中的无英语数字无法正确匹配,但与JavaScript的其他奇怪部分一样,您仍然可以检查(例如波斯语数字):

/[۰, ۹]/.test("۱۲۳۴۵۶۷۸۹۰"); //true