1331 Stimmen

Wie vergleicht man Zeichenfolgen ohne Groß-/Kleinschreibung?

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

1voto

PHP Guru Punkte 1161

Für eine bessere Browserkompatibilität können Sie sich auf einen regulären Ausdruck verlassen. Dies funktioniert in allen in den letzten 20 Jahren veröffentlichten Webbrowsern:

String.prototype.equalsci = function(s) {
    var regexp = RegExp("^"+this.replace(/[.\\+*?\[\^\]$(){}=!<>|:-]/g, "\\$&")+"$", "i");
    return regexp.test(s);
}

"PERSON@Ü.EXAMPLE.COM".equalsci("person@ü.example.com")// gibt true zurück

Dies unterscheidet sich von den anderen hier gefundenen Antworten, weil es berücksichtigt, dass nicht alle Benutzer moderne Webbrowser verwenden.

Hinweis: Wenn Sie ungewöhnliche Fälle wie die türkische Sprache unterstützen müssen, müssen Sie localeCompare verwenden, da i und I im Türkischen nicht der gleiche Buchstabe sind.

"I".localeCompare("i", undefined, { sensitivity:"accent"})===0// gibt true zurück
"I".localeCompare("i", "tr", { sensitivity:"accent"})===0// gibt false zurück

0voto

Sergei Punkte 5385

Dies ist eine verbesserte Version von dieser Antwort.

String.equal = function (s1, s2, ignoreCase, useLocale) {
    if (s1 == null || s2 == null)
        return false;

    if (!ignoreCase) {
        if (s1.length !== s2.length)
            return false;

        return s1 === s2;
    }

    if (useLocale) {
        if (useLocale.length)
            return s1.toLocaleLowerCase(useLocale) === s2.toLocaleLowerCase(useLocale)
        else
            return s1.toLocaleLowerCase() === s2.toLocaleLowerCase()
    }
    else {
        if (s1.length !== s2.length)
            return false;

        return s1.toLowerCase() === s2.toLowerCase();
    }
}

Verwendungen & Tests:

String.equal = function (s1, s2, ignoreCase, useLocale) {
    if (s1 == null || s2 == null)
        return false;

    if (!ignoreCase) {
        if (s1.length !== s2.length)
            return false;

        return s1 === s2;
    }

    if (useLocale) {
        if (useLocale.length)
            return s1.toLocaleLowerCase(useLocale) === s2.toLocaleLowerCase(useLocale)
        else
            return s1.toLocaleLowerCase() === s2.toLocaleLowerCase()
    }
    else {
        if (s1.length !== s2.length)
            return false;

        return s1.toLowerCase() === s2.toLowerCase();
    }
}

// Falls Sie die Prototyp-Verlängerung nicht stört.
String.prototype.equal = function(string2, ignoreCase, useLocale) {
  return String.equal(this.valueOf(), string2, ignoreCase, useLocale);
}

// ------------------ TESTS ----------------------
console.log("Tests...");

console.log('Groß-/Kleinschreibung beachten 1');
var result = "Abc123".equal("Abc123");
console.assert(result === true);

console.log('Groß-/Kleinschreibung beachten 2');
result = "aBC123".equal("Abc123");
console.assert(result === false);

console.log('Groß-/Kleinschreibung ignorieren');
result = "AbC123".equal("aBc123", true);
console.assert(result === true);

console.log('Groß-/Kleinschreibung ignorieren + Aktuelle Gebietsschema');
result = "AbC123".equal("aBc123", true);
console.assert(result === true);

console.log('Türkisch-Test 1 (Groß-/Kleinschreibung ignorieren, en-US)');
result = "IiiI".equal("iI", true, "en-US");
console.assert(result === false);

console.log('Türkisch-Test 2 (Groß-/Kleinschreibung ignorieren, tr-TR)');
result = "IiiI".equal("iI", true, "tr-TR");
console.assert(result === true);

console.log('Türkisch-Test 3 (Groß-/Kleinschreibung beachten, tr-TR)');
result = "IiiI".equal("iI", false, "tr-TR");
console.assert(result === false);

console.log('NULL-Test-1');
result = "AAA".equal(null);
console.assert(result === false);

console.log('NULL-Test-2');
result = String.equal(null, "BBB");
console.assert(result === false);

console.log('NULL-Test-3');
result = String.equal(null, null);
console.assert(result === false);

0voto

Erfan Taghvaei Punkte 162

Wir könnten das auch mit ASCII machen:

function toLower(a){

    let c = "";

    for(let i = 0;i<a.length;i++){

        let f = a.charCodeAt(i);
        if(f < 95){

            c += String.fromCharCode(f+32);
        }
        else{

            c += a[i];
        }
    }

    return c;
}
function compareIt(a,b){

    return toLower(a)==toLower(b);

}
console.log(compareIt("Ein Beispiel" , "ein beispiel"));

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