Ich habe folgendes:
if (referrer.indexOf("Ral") == -1) { ... }
Was ich tun möchte , ist zu machen , Ral
Groß- und Kleinschreibung, so dass es sein kann RAl
, rAl
usw. und noch entsprechen.
Gibt es eine Möglichkeit zu sagen, dass Ral
die Groß- und Kleinschreibung nicht berücksichtigt werden muss?
javascript
string
case-sensitive
case-insensitive
Nate Pet
quelle
quelle
RegExp
direkt aus Benutzereingaben stammenden Datei entstehen. Zum Beispiel könnte ein Benutzer eingeben*
und ein Fehler würde imRegExp
Konstruktor ausgelöst . Die akzeptierte Lösung hat dieses Problem nicht.Antworten:
In
.toLowerCase()
nachreferrer
. Diese Methode wandelt die Zeichenfolge in eine Kleinbuchstabenzeichenfolge um. Verwenden Sie dann.indexOf()
usingral
anstelle vonRal
.Dasselbe kann auch mit einem regulären Ausdruck erreicht werden (besonders nützlich, wenn Sie anhand dynamischer Muster testen möchten):
quelle
toLocaleLowerCase()
( ref ).search
Strings:var index = referrer.search(/Ral/i);
Eine andere Möglichkeit besteht darin, die Suchmethode wie folgt zu verwenden:
Es sieht eleganter aus, als die gesamte Zeichenfolge in Kleinbuchstaben umzuwandeln, und ist möglicherweise effizienter.
Wenn
toLowerCase()
der Code zwei Durchgänge über die Zeichenfolge hat, wird die gesamte Zeichenfolge mit einem Durchlauf in Kleinbuchstaben konvertiert und mit einem anderen nach dem gewünschten Index gesucht.Mit
RegExp
dem Code muss ein Durchlauf über die Zeichenfolge erfolgen, der dem gewünschten Index entspricht.Daher empfehle ich bei langen Zeichenfolgen die Verwendung der
RegExp
Version (ich denke, dass bei kurzen Zeichenfolgen diese Effizienz auf der Erstellung desRegExp
Objekts beruht ).quelle
Verwenden Sie ein RegExp:
Oder verwenden Sie
.toLowerCase()
:quelle
Ab ES2016 können Sie auch eine etwas bessere / einfachere / elegantere Methode verwenden (Groß- und Kleinschreibung beachten):
oder (ohne Berücksichtigung der Groß- und Kleinschreibung):
Hier ist ein Vergleich von
.indexOf()
und.includes()
: https://dev.to/adroitcoder/includes-vs-indexof-in-javascriptquelle
includes
ist case-sensitive in Chrome: try'fooBar'.includes('bar')
==>false
Hier gibt es einige Ansätze.
Wenn Sie nur für diese Instanz eine Prüfung ohne Berücksichtigung der Groß- und Kleinschreibung durchführen möchten, gehen Sie wie folgt vor.
Wenn Sie diese Prüfung regelmäßig durchführen, können Sie alternativ eine neue
indexOf()
Methode hinzufügenString
, die jedoch die Groß- und Kleinschreibung nicht berücksichtigt.quelle
defineProperty
, empfehle ichObject.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. Zwei Aktualisierungen: Explizite Zeichenfolgenkonvertierung mit(s+'')
und nicht aufzählbar in einer Schleife (for(var i in '') ...
wird nicht angezeigtindexOfInsensitive
.quelle
Sie können dies versuchen
quelle
Beispiel für jede Sprache:
quelle
Es ist 2016 und es gibt keinen klaren Weg, wie das geht? Ich hatte auf Copypasta gehofft. Ich werde es versuchen.
Konstruktionshinweise: Ich wollte die Speichernutzung minimieren und damit die Geschwindigkeit verbessern - daher werden keine Zeichenfolgen kopiert / mutiert. Ich gehe davon aus, dass V8 (und andere Motoren) diese Funktion optimieren können.
Mein Grund für den Namen:
Warum nicht...:
toLowerCase()
- mögliche wiederholte Aufrufe von toLowerCase an derselben Zeichenfolge.RegExp
- umständlich mit Variablen zu suchen. Sogar das RegExp-Objekt ist umständlich, Zeichen zu entkommenquelle
Verwenden Sie für eine bessere Suche den folgenden Code:
In der ersten Warnung () gab JavaScript "-1" zurück - mit anderen Worten, indexOf () hat keine Übereinstimmung gefunden: Dies liegt einfach daran, dass "JavaScript" in der ersten Zeichenfolge in Kleinbuchstaben und in der zweiten Zeichenfolge ordnungsgemäß großgeschrieben wird. Um mit indexOf () die Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen, können Sie beide Zeichenfolgen entweder in Groß- oder Kleinbuchstaben schreiben. Dies bedeutet, dass JavaScript wie in der zweiten Warnung () nur nach dem Auftreten der gesuchten Zeichenfolge sucht, wobei die Großschreibung ignoriert wird.
Referenz: http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
quelle
Wenn
referrer
es sich um ein Array handelt, können Sie es verwendenfindIndex()
quelle
Hier ist meine Einstellung:
Skript :
HTML:
Codepen
quelle