編集:この回答は最初に9年前に追加されました。今日localeCompare
は、次のsensitivity: 'accent'
オプションを使用する必要があります。
function ciEquals(a, b) {
return typeof a === 'string' && typeof b === 'string'
? a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0
: a === b;
}
console.log("'a' = 'a'?", ciEquals('a', 'a'));
console.log("'AaA' = 'aAa'?", ciEquals('AaA', 'aAa'));
console.log("'a' = 'á'?", ciEquals('a', 'á'));
console.log("'a' = 'b'?", ciEquals('a', 'b'));
{ sensitivity: 'accent' }
告げるlocaleCompare()
と同じと同じ基本文字の二つの変種を治療することがない限り、それらは、上記(第3の例のように)異なるアクセントを持っています。
代わりに、を使用できます{ sensitivity: 'base' }
。これにより、2つの文字が同じである限り、それらの文字は同等としてA
扱われます(したがって、と同等として扱われますá
)。
注それの三番目のパラメータlocaleCompare
IE10でサポートされているか下げるか、あなたはこれらのブラウザをサポートする必要がある場合は、あなたが、フォールバックのいくつかの種類が必要になりますので、特定のモバイルブラウザは、(上記のリンク先のページの互換性の表を参照)されていません。
function ciEqualsInner(a, b) {
return a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0;
}
function ciEquals(a, b) {
if (typeof a !== 'string' || typeof b !== 'string') {
return a === b;
}
// v--- feature detection
return ciEqualsInner('A', 'a')
? ciEqualsInner(a, b)
: /* fallback approach here */;
}
元の答え
JavaScriptで大文字と小文字を区別しない比較を行う最良のmatch()
方法は、i
フラグを指定してRegExp メソッドを使用することです。
大文字と小文字を区別しない検索
比較される両方の文字列が変数(定数ではない)である場合、文字列からRegExpを生成する必要がありますが、文字列をRegExpコンストラクターに渡すと、文字列に特別な正規表現がある場合、一致が正しくなかったり、一致が失敗したりする可能性がありますその中の文字。
国際化に関心がある場合は使用しないtoLowerCase()
かtoUpperCase()
、すべての言語で大文字と小文字を区別しない正確な比較を提供しないようにしてください。
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()
javascriptメソッドを参照してください。執筆時(IE11 +)は、最新のブラウザでのみサポートされています。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…を