今日私が出会った楽しいスニペットは次のとおりです。
_/\ba/.test("a") --> true
/\bà/.test("à") --> false
_
しかしながら、
_/à/.test("à") --> true
_
まず、wtf?
次に、Wordの先頭でアクセント記号付きの文字に一致させたい場合、どうすればよいですか? (/(?:^|\s|'|\(\) ....
のようなオーバーザトップセレクターの使用を避けたい)
/\bà/.test("à")
が一致しない理由は、「à」がWordの文字ではないためです。エスケープシーケンス_\b
_は、Word文字の境界と非Word文字の間でのみ一致します。 「a」はWord文字であるため、/\ba/.test("a")
は一致します。そのため、文字列の先頭(Word文字ではない)とWord文字である文字 "a"の間に境界があります。
JavaScriptの正規表現の単語文字は_[a-zA-Z0-9_]
_として定義されます。
文字列の先頭でアクセント記号付き文字に一致させるには、正規表現の先頭で_^
_文字を使用します(例__/^à/
_)。その文字は、文字列の先頭を意味します(_\b
_は文字列内のWord境界で一致します)。これは最も基本的で標準的な正規表現であるため、絶対に超えてはなりません。
const regex = /^[\-/A-Za-z\u00C0-\u017F ]+$/;
const test1 = regex.test("à");
const test2 = regex.test("Martinez-Cortez");
const test3 = regex.test("Leonardo da vinci");
const test4 = regex.test("ï");
console.log('test1', test1);
console.log('test2', test2);
console.log('test3', test3);
console.log('test4', test4);
WakとCourの答えから構築:
/^[\-/A-Za-z\u00C0-\u017F ]+$/
スペースやダッシュにも使用できます。
例:レオナルドダヴィンチ、マルティネスコルテス