1331 Stimmen

Wie vergleicht man Zeichenfolgen ohne Groß-/Kleinschreibung?

Wie führe ich eine Groß-/Kleinschreibung-ignorierende Zeichenfolgenvergleich in JavaScript durch?

1408voto

SLaks Punkte 832502

Der einfachste Weg, dies zu tun (wenn Sie sich keine Sorgen um spezielle Unicode-Zeichen machen) ist, toUpperCase aufzurufen:

var areEqual = string1.toUpperCase() === string2.toUpperCase();

308voto

Samuel Neff Punkte 70231

BEARBEITEN: Diese Antwort wurde vor 9 Jahren hinzugefügt. Heutzutage sollten Sie localeCompare mit der Option sensitivity: 'accent' 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'));

Die Option { sensitivity: 'accent' } sagt localeCompare(), dass zwei Varianten des gleichen Basisschriftzeichens gleich behandelt werden sollen, außer wenn sie unterschiedliche Akzente haben (wie im dritten Beispiel) oben.

Alternativ können Sie { sensitivity: 'base' } verwenden, um zwei Zeichen als äquivalent zu behandeln, solange ihr Basiszeichen identisch ist (also würde A als äquivalent zu á behandelt).

Beachten Sie, dass der dritte Parameter von localeCompare in IE10 oder niedriger oder bestimmten mobilen Browsern nicht unterstützt wird (siehe die Kompatibilitätstabelle auf der oben verlinkten Seite), also wenn Sie diese Browser unterstützen müssen, benötigen Sie eine Art Ersatz:

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-Erkennung
    return ciEqualsInner('A', 'a')
        ? ciEqualsInner(a, b)
        : /*  Fallback-Ansatz hier  */;
}

Ursprüngliche Antwort

Der beste Weg, einen Groß-/Kleinschreibung-unabhängigen Vergleich in JavaScript durchzuführen, ist die Verwendung der RegExp-Methode match() mit dem Flag i.

Groß-/Kleinschreibung-unabhängige Suche

Wenn beide verglichenen Zeichenfolgen Variablen sind (nicht Konstanten), ist es etwas komplizierter, da Sie eine RegExp aus der Zeichenfolge generieren müssen, jedoch kann das Übergeben der Zeichenfolge an den RegExp-Konstruktor zu falschen Übereinstimmungen oder fehlgeschlagenen Übereinstimmungen führen, wenn die Zeichenfolge Sonderzeichen für Regex enthält.

Wenn Sie internationalisieren möchten, verwenden Sie nicht toLowerCase() oder toUpperCase(), da dies in allen Sprachen keine genauen Groß-/Kleinschreibung-unabhängigen Vergleiche bietet.

http://www.i18nguy.com/unicode/turkish-i18n.html

123voto

Jay Wick Punkte 10054

Wie in den neuesten Kommentaren erwähnt, unterstützt string::localeCompare fallunabhängige Vergleiche (unter anderem).

Hier ist ein einfaches Beispiel

'xyz'.localeCompare('XyZ', undefined, { sensitivity: 'base' }); // gibt 0 zurück

Und eine generische Funktion, die du verwenden könntest

function equalsIgnoringCase(text, other) {
    return text.localeCompare(other, undefined, { sensitivity: 'base' }) === 0;
}

Beachte, dass du anstelle von undefined wahrscheinlich die spezifische Region eingeben solltest, mit der du arbeitest. Dies ist wichtig, wie in den MDN-Dokumenten angegeben

Im Schwedischen sind ä und a separate Grundbuchstaben

Empfindlichkeitsoptionen

Empfindlichkeitsoptionen tabellarisch von MDN

Browser-Unterstützung

Zum Zeitpunkt des Postings unterstützen der UC Browser für Android und Opera Mini nicht die locale und options Parameter. Bitte prüfe https://caniuse.com/#search=localeCompare für aktuelle Informationen.

50voto

SP007 Punkte 1791

Update:

Gemäß den Kommentaren überprüft die vorherige Antwort, ob Quelle das Schlüsselwort enthält, um es gleichwertig zu machen, wird ^ und $ hinzugefügt.

(/^Schlüsselwort$/i).test(Quelle)

Mit Hilfe von regulären Ausdrücken können wir dies auch erreichen.

(/Schlüsselwort/i).test(Quelle)

/i steht für Groß-/Kleinschreibung ignorieren. Wenn nicht notwendig, können wir dies ignorieren und statt dessen für NICHT-Groß-/Kleinschreibungssensitive Übereinstimmungen testen wie

(/Schlüsselwort/).test(Quelle)

32voto

Shital Shah Punkte 54846

Denken Sie daran, dass die Groß- und Kleinschreibung eine ortsabhängige Operation ist. Je nach Szenario möchten Sie dies möglicherweise berücksichtigen. Wenn Sie beispielsweise die Namen von zwei Personen vergleichen, sollten Sie die Sprachumgebung berücksichtigen, aber wenn Sie maschinengenerierte Werte wie UUID vergleichen, müssen Sie dies möglicherweise nicht. Deshalb verwende ich die folgende Funktion in meiner Hilfsbibliothek (beachten Sie, dass die Typüberprüfung aus Leistungsgründen nicht enthalten ist).

function compareStrings (string1, string2, ignoreCase, useLocale) {
    if (ignoreCase) {
        if (useLocale) {
            string1 = string1.toLocaleLowerCase();
            string2 = string2.toLocaleLowerCase();
        }
        else {
            string1 = string1.toLowerCase();
            string2 = string2.toLowerCase();
        }
    }

    return string1 === string2;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X