Enthält groß-und Kleinschreibung
Habe ich Folgendes:
if (referrer.indexOf("Ral") == -1) { ... }
Was ich wie zu tun ist, um Ral
groß-und Kleinschreibung, so dass es sein kann RAl
, rAl
usw. und dennoch übereinstimmen.
Gibt es eine Möglichkeit zu sagen, dass Ral
werden groß-und Kleinschreibung?
- Ich denke die groß / Kleinschreibung bei regex ist die elegantere Lösung, aber jeder sollte Bedenken das die Fallstricke der Schaffung einer
RegExp
direkt aus den Benutzereingaben. Zum Beispiel könnte ein Benutzer eingeben*
und würde ein Fehler geworfen werden, die in derRegExp
Konstruktor. Die akzeptierte Lösung hat dieses problem nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen
.toLowerCase()
nachreferrer
. Diese Methode dreht den string in Kleinbuchstaben string. Verwenden Sie dann.indexOf()
mitral
stattRal
.Das gleiche kann auch erzielt werden unter Verwendung eines Regulären Ausdrucks (besonders nützlich, wenn Sie testen wollen, gegen dynamische Muster):
toLocaleLowerCase()
(ref).search
Methode:var index = referrer.search(/Ral/i);
if(referrer.toLowerCase().indexOf("Ral".toLowerCase()) === -1) {
Anderen Optionen um die Suche zu verwenden Verfahren wie folgt:
Sieht es eleganter aus, dann konvertieren Sie die gesamte Zeichenfolge in Kleinbuchstaben und es könnte effizienter sein.
Mit
toLowerCase()
den code haben zwei pass über die Schnur, ein pass auf die gesamte Zeichenfolge konvertiert in Kleinbuchstaben, und ein weiterer ist die Suche nach dem gewünschten index.Mit
RegExp
den code haben einen pass über die Schnur, die es sieht, um mit den gewünschten index.Daher, auf lange strings empfehle ich die Nutzung der
RegExp
version (ich vermute, dass auf kurze strings, die dieser Effizienz geht auf das Konto der Erstellung derRegExp
Objekt obwohl)Verwenden Sie ein RegExp:
Oder verwenden Sie
.toLowerCase()
:Vom ES2016 Sie können auch etwas bessere /einfachere /elegantere Methode:
oder
Hier ist ein Vergleich von
.indexOf()
und.includes()
:https://dev.to/adroitcoder/includes-vs-indexof-in-javascript
'fooBar'.includes('bar')
==>false
Gibt es ein paar Ansätze hier.
Wenn Sie möchten, führen Sie eine groß- /Kleinschreibung zu überprüfen, nur für diese Instanz, tun Sie etwas wie das folgende.
Alternativ, wenn Sie der Durchführung dieses regelmäßig überprüfen, können Sie eine neue
indexOf()
-wie Methode umString
, aber machen Sie es groß-und Kleinschreibung.defineProperty
, schlage ich vorObject.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. Zwei updates: Explizite string-Umwandlung mit(s+'')
- und non-enumerable-in einer Schleife (for(var i in '') ...
nicht zeigenindexOfInsensitive
.Im Jahr 2016, und es gibt keinen klaren Weg, wie dies zu tun? Ich hatte gehofft, für einige copypasta. Ich werde gehen.
Design notes: ich wollte Speichernutzung zu minimieren, und dadurch die Geschwindigkeit - es ist kein kopieren/mutierenden strings. Ich nehme an, V8 (und andere Suchmaschinen) optimieren kann diese Funktion.
Mein Grund für den Namen:
Warum nicht...:
toLowerCase()
- Potenzial wiederholte Aufrufe toLowerCase auf die gleiche Zeichenfolge.RegExp
- umständlich zu suchen, mit variable. Auch das RegExp-Objekt ist umständlich, dass die escape-ZeichenWerden, um besser zu suchen, verwenden Sie den folgenden code,
In der erste alert(), JavaScript-Rückgabe "-1" - in anderen Worten, indexOf() nicht gefunden wird: dies ist einfach, weil "JavaScript" in Kleinbuchstaben in der ersten Zeichenfolge, und richtig groß geschrieben in der zweiten. Zur Durchführung der groß-und Kleinschreibung suchen mit indexOf(), können Sie die beiden Zeichenfolgen, die entweder groß-oder Kleinbuchstaben. Dies bedeutet, dass, wie in der zweiten alert () JavaScript wird nur prüfen, für die vorkommen der Zeichenfolge, die Sie suchen, groß - /Kleinschreibung ignoriert.
Referenz,
http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
Wenn
referrer
ist ein array, können SiefindIndex()
Hier ist mein nehmen:
Skript:
HTML:
Codepen