EDYCJA : Ta odpowiedź została pierwotnie dodana 9 lat temu. Dzisiaj powinieneś używać localeCompare
z sensitivity: 'accent'
opcją:
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' }
Mówi localeCompare()
traktować dwa warianty tego samego listu bazowej jako taki sam , chyba że mają różne akcenty (jak w trzecim przykładzie) powyżej.
Alternatywnie możesz użyć { sensitivity: 'base' }
, który traktuje dwie postacie jako równoważne, o ile ich podstawowy znak jest taki sam (więc A
byłoby traktowane jako równoważne á
).
Pamiętaj, że trzeci parametr parametru localeCompare
nie jest obsługiwany w przeglądarce IE10 lub nowszej lub w niektórych przeglądarkach mobilnych (zobacz tabelę kompatybilności na powyższej stronie), więc jeśli potrzebujesz obsługi tych przeglądarek, potrzebujesz pewnego rodzaju rezerwy:
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 */;
}
Oryginalna odpowiedź
Najlepszym sposobem na dokonanie porównania bez rozróżniania wielkości liter w JavaScript jest użycie match()
metody RegExp z i
flagą.
Wyszukiwanie bez rozróżniania wielkości liter
Gdy oba porównywane ciągi są zmiennymi (a nie stałymi), jest to nieco bardziej skomplikowane, ponieważ musisz wygenerować RegExp z ciągu, ale przekazanie ciągu do konstruktora RegExp może spowodować niepoprawne dopasowanie lub nieudane dopasowanie, jeśli ciąg ma specjalne wyrażenie regularne znaki w nim.
Jeśli dbasz o umiędzynarodowienie nie używać toLowerCase()
albo toUpperCase()
jak nie dostarcza dokładnych case-niewrażliwe porównań we wszystkich językach.
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()
metodę javascript. Obsługiwane tylko przez nowoczesne przeglądarki w momencie pisania (IE11 +). patrz developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…