を使いましょう


あなたが私のように、定期的にregexを使用して英数字フィールドを検証します.
'Till'.match(/[a-zA-Z0-9]+/gu)
もちろんこれは技術的に正しい.そして、あなたがフィールドを教えているとき、ほとんどの検証ライブラリがどうなるのかalpha / alphanumeric /など
しかし、私はこのアプローチと多くの問題がある他の人もやる.なぜならドイツから来たからです.具体的には、L ' Denscheidと呼ばれる町から.そして、L ' DenscheidはUrlautのため、上記の正規表現と一致しません.フランス語、スペイン語、チェコ語のような言語についても同様です.
では、どのようにして開発者として英語以外の言語をより包括的に扱うことができますか?我々は、ラテンアルファベットのすべての可能なバリエーションを含める必要がありますか?それは一般的な提案ですが、もちろん、それはよくスケールしません.

幸いにも、Unicodeは私たちをカバーしています.
'Lüdenscheid'.match(/[\p{Letter}\p{Mark}]+/gu)
The \p フラグは、私たちがいわゆるUnicode Character Category . Unicodeでは、すべての文字は、我々の正規表現で使用できるカテゴリにソートされます.The Letter カテゴリーには、すべての種類の言語からの手紙が含まれています.< , > , + or $ セキュリティ上重要です.The Mark カテゴリー-コメント(感謝)で指摘されるように-マークを結合することを含みます.ユニコードで,文字のようにü のいずれか1つまたは2つのコードポイントを結合することができます.ですから、文字がどのように符号化されているかによってMark カテゴリ.

マークカテゴリーの詳細
我々が省略するならばMark カテゴリを次の正規表現を実行します.'Lüdenscheid'.match(/[\p{Letter}]+/gu) マッチしますLüdenscheid , if the ü は単一の文字としてエンコードされます.一方、もしü は文字マークの組み合わせとしてエンコードされます(u + ̈ ), 正規表現はマッチしますLu , それが止まるので̈ マーク.

ブラウザサポート
Browser support この機能については、IE(ないエッジ)唯一の除外です.

ボーナス
// Match only letters
'Lüdenscheid'.match(/[\p{Letter}\p{Mark}]+/gu)

// Match letters and spaces
'Pražští filharmonici'.match(/[\p{Letter}\p{Mark}\s]+/gu)

// Match letters and hyphens
'Île-de-France'.match(/[\p{Letter}\p{Mark}-]+/gu)

// Match letters hyphens and spaces
'Île-de-France'.match(/[\p{Letter}\p{Mark}\s-]+/gu)