JavaScript: Kulturunabhängiger String-Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung

8

Wenn diese genaue Frage schon einmal gestellt wurde, weisen Sie mich bitte auf die entsprechende Frage hin.

tl; dr: Wie vergleicht man zwei Strings in JavaScript und ignoriert die Hülle nach Englisch Regeln?

Mein Code analysiert und vergleicht Daten aus zwei verschiedenen Quellen, von denen jede unterschiedliche Meinungen darüber hat, ob Schlüsselwörter groß oder klein sein sollten, was bedeutet, dass ein Vergleich zwischen Groß- und Kleinschreibung erforderlich ist. Ich möchte jedoch nicht, dass das System bricht, wenn es in anderen Kulturen verwendet wird (wie die Türkei und ihre notorischen Probleme mit dem Buchstaben I).

Hat JavaScript eine Möglichkeit, einen kulturunabhängigen (lesen: englischen) Vergleich von Groß- / Kleinschreibung ohne Bedeutung durchzuführen?

    
Smallhacker 21.08.2013, 14:05
quelle

3 Antworten

9
  

Wie vergleicht man zwei Strings in JavaScript, ohne zu brechen, wenn man sie in anderen Kulturen benutzt (wie die Türkei und ihre notorischen Probleme mit dem Buchstaben I)? Gibt es bei JavaScript eine Möglichkeit, einen kulturunabhängigen Vergleich von Groß- und Kleinschreibung unabhängig voneinander durchzuführen?

Ja, indem Sie einfach die Standardmethode .toLowerCase Das ist nicht betroffen durch Gebietsschemaeinstellungen. a.toLowerCase() == b.toLowerCase() ist völlig in Ordnung. Die Spezifikation schreibt sogar vor:

  

Das Ergebnis muss gemäß den Fallzuordnungen in der Unicode-Zeichendatenbank

abgeleitet werden

Dies ist definitiv konsistent über alle Systeme unabhängig von ihren Einstellungen.

Wenn Sie das aktuelle Gebietsschema berücksichtigen, verwenden Sie .toLocaleLowerCase explizit. MDN besagt:

  

In den meisten Fällen wird dies zu demselben Ergebnis wie zu LowerCase () führen, aber für einige Gebietsschemas wie Türkisch, deren Fallzuordnungen nicht den standardmäßigen Fallzuordnungen in Unicode folgen, kann ein anderes Ergebnis vorliegen.

>

aber auf Gebietsschemata zu vertrauen scheint nicht gut zu funktionieren ...

    
Bergi 15.01.2014, 04:32
quelle
2

Theoretisch gibt es dafür eine Methode: String.localCompare ( ) .

Das Problem ist, dass es von den meisten Browsern nicht korrekt implementiert wird.

Vielleicht haben Sie mehr Glück mit String.toLocaleLowerCase () .

Beispiel:

%Vor%

Beachten Sie, dass die folgenden Einträge nicht übereinstimmen (weil ä und a unterschiedliche Zeichen sind):

%Vor%     
Daniele Torino 06.01.2014 17:59
quelle
0

Sie können localeCompare verwenden, aber beachten Sie, dass es zwischen Browsern unterschiedlich implementiert ist. Was in Chrome / Firefox / IE11 funktioniert, ist:

%Vor%

%Vor% %Vor%
    
lanternmarsh 17.03.2016 20:36
quelle