webentwicklung-frage-antwort-db.com.de

Enthält Groß- und Kleinschreibung

Ich habe folgendes:

if (referrer.indexOf("Ral") == -1) { ... }

Was ich gerne machen möchte, ist, Ral unabhängig von der Groß- und Kleinschreibung zu machen, sodass es RAl, rAl usw. sein kann und trotzdem übereinstimmt.

Gibt es eine Möglichkeit zu sagen, dass Ral zwischen Groß- und Kleinschreibung unterscheiden muss? 

328
Nate Pet

Fügen Sie .toLowerCase() nach referrer hinzu. Diese Methode wandelt die Zeichenfolge in eine Zeichenfolge mit Kleinbuchstaben um. Verwenden Sie dann .indexOf() mit ral anstelle von Ral.

if (referrer.toLowerCase().indexOf("ral") === -1) { 

Dasselbe kann auch mit einem regulären Ausdruck erreicht werden (besonders nützlich, wenn Sie mit dynamischen Mustern testen möchten):

if (!/Ral/i.test(referrer)) {
   //    ^i = Ignore case flag for RegExp
495
Rob W

Eine weitere Möglichkeit besteht darin, die Suchmethode wie folgt zu verwenden:

if (referrer.search(new RegExp("Ral", "i")) == -1) { ...

Es sieht eleganter aus, wenn die gesamte Zeichenfolge in Kleinbuchstaben umgewandelt wird, und es kann effizienter sein. 
Mit toLowerCase() wird der Code zweimal über die Zeichenfolge übergeben. Ein Durchlauf betrifft die gesamte Zeichenfolge, um ihn in Kleinbuchstaben zu konvertieren, und ein anderer besteht darin, den gewünschten Index zu suchen.
Mit RegExp hat der Code einen Durchlauf über der Zeichenfolge, die dem gewünschten Index entspricht.

Daher empfehle ich bei langen Zeichenfolgen die Verwendung der RegExp-Version (ich schätze, dass diese Effizienz bei kurzen Zeichenfolgen auf das Konto des RegExp-Objekts zurückzuführen ist).

81
Kfir Erez

Verwenden Sie ein RegExp:

if (!/ral/i.test(referrer)) {
    ...
}

Oder verwenden Sie .toLowerCase():

if (referrer.toLowerCase().indexOf("ral") == -1)
19
gilly3

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.

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
    ...

Wenn Sie diese Überprüfung regelmäßig durchführen, können Sie alternativ eine neue indexOf()- ähnliche Methode zu String hinzufügen, dabei jedoch die Groß- und Kleinschreibung beachten.

String.prototype.indexOfInsensitive = function (s, b) {
    return this.toLowerCase().indexOf(s.toLowerCase(), b);
}

// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
10
cheeken

Ab ES2016 können Sie auch eine etwas bessere/einfachere/elegantere Methode verwenden:

if (referrer.includes("Ral")) { ... }

oder

if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }

Hier ist ein Vergleich von .indexOf() und .includes(): https://dev.to/adroitcoder/includes-vs-indexof-in-javascript

5
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
4
Kendall Frey

Es ist 2016 und es gibt keinen klaren Weg, wie das geht? Ich habe auf Copypasta gehofft. Ich werde es versuchen.

Anmerkungen zum Design: Ich wollte die Speicherauslastung minimieren und daher die Geschwindigkeit verbessern - so dass keine Zeichenketten kopiert/mutiert werden. Ich gehe davon aus, dass V8 (und andere Engines) diese Funktion optimieren können.

//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
    //TODO: guard conditions here

    var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
    var needleIndex = 0;
    var foundAt = 0;
    for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
        var needleCode = needle.charCodeAt(needleIndex);
        if (needleCode >= 65 && needleCode <= 90) needleCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
        var haystackCode = haystack.charCodeAt(haystackIndex);
        if (haystackCode >= 65 && haystackCode <= 90) haystackCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser

        //TODO: code to detect unicode characters and fallback to toLowerCase - when > 128?
        //if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
        if (haystackCode !== needleCode)
        {
            foundAt = haystackIndex;
            needleIndex = 0; //Start again
        }
        else
            needleIndex++;

        if (needleIndex == needle.length)
            return foundAt;
    }

    return -1;
}

Mein Grund für den Namen:

  • Sollte IndexOf im Namen haben
  • Fügen Sie kein Suffix hinzu - Of verweist auf den folgenden Parameter
  • Verwenden Sie nicht "caseInsensitive", das ist sooooo lang
  • "natürlich" ist ein guter Kandidat, da standardmäßige Vergleiche bei der Suche nach einem bestimmten Fall für den Menschen nicht natürlich sind. 

Warum nicht...:

  • toLowerCase() - potentielle wiederholte Aufrufe von toLowerCase in derselben Zeichenfolge.
  • RegExp - umständlich für die Suche mit Variablen. Sogar das RegExp-Objekt ist umständlich, Zeichen zu entkommen
1
Todd

Um eine bessere Suche durchzuführen, verwenden Sie den folgenden Code:

var myFav   = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";

// Check for matches with the plain Vanilla indexOf() method:
alert( theList.indexOf( myFav ) );

// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );

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 richtig geschrieben ist. Wenn Sie mit indexOf () zwischen Groß- und Kleinschreibung suchen, können Sie beide Zeichenfolgen entweder in Großbuchstaben oder in Kleinbuchstaben schreiben. Dies bedeutet, dass JavaScript wie in der zweiten Warnung () nur das Vorkommen der gesuchten Zeichenfolge überprüft und die Großschreibung ignoriert.

Referenz, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm

1
Diganta Kumar

Hier ist mein Take:

Skript:

var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
  $("#textContainer").html(originalText)
  var text = $("#textContainer").html()
  var val = $("#search").val()
  if(val=="") return;
  var matches = text.split(val)
  for(var i=0;i<matches.length-1;i++) {
    var ind =  matches[i].indexOf(val)
    var len = val.length
      matches[i] = matches[i] + "<span class='selected'>" + val + "</span>"
  }
  $("#textContainer").html(matches.join(""))

HTML: 

<input type="text" id="search">
<div id="textContainer">
lorem ipsum is simply dummy text of the printing and typesetting industry. lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of letraset sheets containing lorem ipsum passages, and more recently with desktop publishing software like Aldus pagemaker including versions of lorem ipsum.</div>

Codepen

0

Wenn referrer ein Array ist, können Sie findIndex() verwenden.

 if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}
0
A-Sharabiani

Beispiel für jede Sprache:

'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
0
alex_1948511