Wie führe ich eine Groß-/Kleinschreibung-ignorierende Zeichenfolgenvergleich in JavaScript durch?
Antworten
Zu viele Anzeigen?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
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);
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"));
- See previous answers
- Weitere Antworten anzeigen