1331 Stimmen

Wie vergleicht man Zeichenfolgen ohne Groß-/Kleinschreibung?

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

14voto

Jasen Punkte 11007

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.

13voto

Nick Uraltsev Punkte 21981

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

7voto

Chris Chute Punkte 2599

Angenommen, wir wollen die Zeichenvariabel needle in der Zeichenvariablen haystack finden. Es gibt drei Fallstricke:

  1. Internationalisierte Anwendungen sollten string.toUpperCase und string.toLowerCase vermeiden. Verwenden Sie stattdessen einen regulären Ausdruck, der die Groß-/Kleinschreibung ignoriert. Zum Beispiel var needleRegExp = new RegExp(needle, "i"); gefolgt von needleRegExp.test(haystack).
  2. Im Allgemeinen kennen Sie möglicherweise den Wert von needle nicht. Achten Sie darauf, dass needle keine regulären Ausdruck Sonderzeichen enthält. Escapen Sie diese mit needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");.
  3. In anderen Fällen, wenn Sie needle und haystack 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
}

6voto

Nebulosar Punkte 1452

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");
}

6voto

Om Prakash Sharma Punkte 1494

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');
}

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