答案 0 :(得分:10)
JavaScript不支持Unicode正则表达式匹配(并且它远不是唯一真正存在的语言)。
答案 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)
\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数字0
与9
是正常且正确的。权威参考是ECMAScript standard。读取并不是特别容易,但是第15.10.2.12节(CharacterClassEscape)指定\d
表示“包含字符0到9的十个元素字符集”。
答案 7 :(得分:0)
是的,使用\d
与JavaScript中的无英语数字无法正确匹配,但与JavaScript的其他奇怪部分一样,您仍然可以检查(例如波斯语数字):
/[۰, ۹]/.test("۱۲۳۴۵۶۷۸۹۰"); //true