EDIT : Diese Antwort wurde ursprünglich vor 9 Jahren hinzugefügt. Heute sollten Sie localeCompare
mit der sensitivity: 'accent'
Option verwenden:
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'));
Das { sensitivity: 'accent' }
sagt localeCompare()
, dass zwei Varianten desselben Basisbuchstabens als gleich behandelt werden sollen, es sei denn, sie haben unterschiedliche Akzente (wie im dritten Beispiel) oben.
Alternativ können Sie verwenden { sensitivity: 'base' }
, bei dem zwei Zeichen als gleichwertig behandelt werden, solange ihr Basiszeichen identisch ist (dies A
würde als gleichwertig behandelt werden á
).
Beachten Sie, dass der dritte Parameter von localeCompare
in IE10 oder niedriger oder in bestimmten mobilen Browsern nicht unterstützt wird (siehe Kompatibilitätstabelle auf der oben verlinkten Seite). Wenn Sie diese Browser unterstützen müssen, benötigen Sie eine Art Fallback:
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 */;
}
Ursprüngliche Antwort
Der beste Weg, einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung in JavaScript durchzuführen, ist die Verwendung der RegExp- match()
Methode mit dem i
Flag.
Suche ohne Berücksichtigung der Groß- und Kleinschreibung
Wenn beide verglichenen Zeichenfolgen Variablen (keine Konstanten) sind, ist dies etwas komplizierter, da Sie aus der Zeichenfolge ein RegExp generieren müssen. Die Übergabe der Zeichenfolge an den RegExp-Konstruktor kann jedoch zu falschen Übereinstimmungen oder fehlgeschlagenen Übereinstimmungen führen, wenn die Zeichenfolge einen speziellen regulären Ausdruck aufweist Zeichen darin.
Wenn Sie sich über die Internationalisierung Pflege nicht verwenden toLowerCase()
oder toUpperCase()
wie es nicht genau Groß- und Kleinschreibung Vergleiche in allen Sprachen bietet.
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()
Javascript-Methode. Wird zum Zeitpunkt des Schreibens nur von modernen Browsern unterstützt (IE11 +). siehe developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…