1

この名前検証正規表現を機能させようとしていますが、問題があります。regexp 用の unicode アドオンがあることを確認しましたが、機能していないようです。この正規表現は、php pcre regex で動作します。

XRegExp("^[a-zA-Z\s,.'-\pL]+$").test('á');

上記は false を返します。私は xregexp を使用したことがなく、これを行う方法を説明しているように見えるものをオンラインで見つけることができませんでした。どんな助けでも素晴らしいでしょう、ありがとう!

この特定の正規表現は、すべての Unicode 文字、ダッシュ、カンマ、ピリオド、および大文字と小文字の文字を受け入れる必要があります。

4

1 に答える 1

1

コンソールでパターンがどのように見えるかを確認すると、非常に簡単です。のように見えます/^[a-zA-Zs,.'-pL]+$/。つまり、バックスラッシュがなくなったため、Unicode 文字とはまったく一致しません (正規表現で特殊文字をエスケープするリテラル バックスラッシュを定義するには、文字列リテラルで二重のバックスラッシュを使用する必要があります)。空白の代わりにリテラルsに一致し'-p、有効な範囲を作成するため、エラーはスローされませんが、結果は本当に予期しないものであることに注意してください。その範囲が一致するものは次のとおりです(はい、数字を含みます):

ここに画像の説明を入力

また、見逃しているのは、 が\pL既に含まれ[a-zA-Z]ているため、パターンのその部分が冗長であることです。

// YOUR REGEX
console.log("^[a-zA-Z\s,.'\-\pL]+$"); // => /^[a-zA-Zs,.'-pL]+$/
// SHOULD BE DEFINE AS
console.log("^[\\s,.'\\pL-]+$"); // => /^[\s,.'\pL-]+$/
// TEST
console.log(XRegExp("^[\\s,.'\\pL-]+$").test('á')); // => true
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>

于 2017-03-30T06:51:29.100 に答える