\ d只匹配0-9位数?

问题描述 投票:9回答:8

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

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

这是正常行为吗?

javascript regex unicode internationalization
8个回答
10
投票

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

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


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>

EDIT:

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


3
投票

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

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp

2
投票

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


1
投票

来自MDN。 MDN

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


1
投票
RegEx Test

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


1
投票

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


0
投票

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

\d
© www.soinside.com 2019 - 2024. All rights reserved.