Wie führe ich eine Groß-/Kleinschreibung-ignorierende Zeichenfolgenvergleich in JavaScript durch?
Antworten
Zu viele Anzeigen?Wenn Sie sich über die Richtung der Ungleichheit sorgen (vielleicht möchten Sie eine Liste sortieren), müssen Sie praktisch eine Groß- und Kleinschreibungsumwandlung vornehmen, und da es mehr Kleinbuchstaben in Unicode gibt als Großbuchstaben, ist toLowerCase wahrscheinlich die beste Konvertierungsmethode.
function my_strcasecmp( a, b )
{
if((a+'').toLowerCase() > (b+'').toLowerCase()) return 1
if((a+'').toLowerCase() < (b+'').toLowerCase()) return -1
return 0
}
Javascript verwendet scheinbar für Zeichenfolgenvergleiche das Gebietsschema "C", sodass die resultierende Sortierung hässlich aussehen wird, wenn die Zeichenfolgen außer ASCII-Buchstaben enthalten. Daran kann nicht viel geändert werden, ohne die Zeichenfolgen genauer zu überprüfen.
Ich habe kürzlich eine Mikro-Bibliothek erstellt, die case-insensitive String-Helfer bereitstellt: https://github.com/nickuraltsev/ignore-case. (Es verwendet intern toUpperCase
.)
var ignoreCase = require('ignore-case');
ignoreCase.equals('FOO', 'Foo'); // => true
ignoreCase.startsWith('foobar', 'FOO'); // => true
ignoreCase.endsWith('foobar', 'BaR'); // => true
ignoreCase.includes('AbCd', 'c'); // => true
ignoreCase.indexOf('AbCd', 'c'); // => 2
Angenommen, wir wollen die Zeichenvariabel needle
in der Zeichenvariablen haystack
finden. Es gibt drei Fallstricke:
- Internationalisierte Anwendungen sollten
string.toUpperCase
undstring.toLowerCase
vermeiden. Verwenden Sie stattdessen einen regulären Ausdruck, der die Groß-/Kleinschreibung ignoriert. Zum Beispielvar needleRegExp = new RegExp(needle, "i");
gefolgt vonneedleRegExp.test(haystack)
. - Im Allgemeinen kennen Sie möglicherweise den Wert von
needle
nicht. Achten Sie darauf, dassneedle
keine regulären Ausdruck Sonderzeichen enthält. Escapen Sie diese mitneedle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
. - In anderen Fällen, wenn Sie
needle
undhaystack
genau übereinstimmen wollen, jedoch die Groß-/Kleinschreibung ignorieren, stellen Sie sicher, dass Sie"^"
am Anfang und"$"
am Ende Ihres regulären Ausdruckskonstruktors hinzufügen.
Unter Berücksichtigung der Punkte (1) und (2) wäre ein Beispiel:
var haystack = "A. BAIL. Of. Hay.";
var needle = "bail.";
var needleRegExp = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i");
var result = needleRegExp.test(haystack);
if (result) {
// Ihr Code hier
}
Viele Antworten hier, aber ich möchte eine Lösung hinzufügen, die auf der Erweiterung der String-Bibliothek basiert:
String.prototype.equalIgnoreCase = function(str)
{
return (str != null
&& typeof str === 'string'
&& this.toUpperCase() === str.toUpperCase());
}
Auf diese Weise können Sie es einfach so verwenden, wie Sie es in Java tun!
Beispiel:
var a = "hello";
var b = "HeLLo";
var c = "world";
if (a.equalIgnoreCase(b)) {
document.write("a == b");
}
if (a.equalIgnoreCase(c)) {
document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
document.write("b != c");
}
Die Ausgabe wird sein:
"a == b"
"b != c"
String.prototype.equalIgnoreCase = function(str) {
return (str != null &&
typeof str === 'string' &&
this.toUpperCase() === str.toUpperCase());
}
var a = "hello";
var b = "HeLLo";
var c = "world";
if (a.equalIgnoreCase(b)) {
document.write("a == b");
document.write("");
}
if (a.equalIgnoreCase(c)) {
document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
document.write("b != c");
}
Verwenden Sie RegEx für Zeichenfolgenübereinstimmung oder -vergleich.
In JavaScript können Sie match()
für Zeichenfolgenvergleich verwenden, vergessen Sie nicht, i
in RegEx zu setzen.
Beispiel:
var matchString = "Test";
if (matchString.match(/test/i)) {
alert('Zeichenfolge übereinstimmend');
}
else {
alert('Zeichenfolge nicht übereinstimmend');
}