9

私の知る限り\d、たとえば、英語以外の数字と一致するはずです۱۲۳۴۵۶۷۸۹۰が、JavaScript では正しく機能しません。

この jsFiddle を参照してください: http://jsfiddle.net/xZpam/

これは正常な動作ですか?

4

8 に答える 8

11

JavaScript はこれをサポートしていないようです (RegExp の言語の他の弱点とともに)。ただし、Unicode アドオンを持つXRegExp\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>

編集:

非 ECMA スクリプト正規表現エンジンと同等のように見える\p{Nd}代わりに使用されます。指摘してくれたShervinに感謝します。Shervinによるこのフィドルも参照してください。\p{N}\d\p{Nd}

于 2013-05-21T06:27:33.097 に答える
10

JavaScript は Unicode regex マッチングをサポートしていません (これが当てはまる言語は JavaScript だけではありません)。

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

于 2013-05-21T05:50:01.483 に答える
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].
于 2013-05-21T05:51:40.383 に答える
2

\dMDN[0-9]によると、と同等です。

于 2013-05-21T05:51:50.403 に答える
1

はい、アスキー数字のみを\d一致させるのは正常で正しいことです。正式なリファレンスはECMAScript 標準です。特に読みやすいとは言えませんが、15.10.2.12 節 (CharacterClassEscape) では、「0 から 9 までの文字を含む 10 要素の文字セット」を示すと指定されています。09\d

于 2013-05-21T06:49:24.287 に答える
1

MDN から。正規表現テスト

基本的なラテン アルファベットの数字に一致します。[0-9] に相当します。

于 2013-05-21T05:51:20.177 に答える
1
Matches a digit character. Equivalent to [0-9].

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

MDNから

于 2013-05-21T06:05:00.303 に答える