501 Stimmen

Enthält Groß- und Kleinschreibung nicht berücksichtigt

Ich habe die folgenden:

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

Was ich gerne mache, ist Ral Groß- und Kleinschreibung nicht berücksichtigt werden, so dass sie RAl , rAl usw. und passen trotzdem.

Gibt es eine Möglichkeit zu sagen, dass Ral muss die Groß- und Kleinschreibung nicht beachtet werden?

4 Stimmen

Ich denke, dass die Groß-/Kleinschreibung nicht berücksichtigende Regex die elegantere Lösung ist, aber jeder sollte die Fallstricke beim Erstellen einer RegExp direkt aus Benutzereingaben. Zum Beispiel könnte ein Benutzer eingeben * und es würde ein Fehler in der RegExp Konstrukteur. Bei der akzeptierten Lösung gibt es dieses Problem nicht.

3voto

Kind Contributor Punkte 16008

Wir schreiben das Jahr 2016 und es gibt keinen klaren Weg, wie man das machen kann? Ich hatte auf ein paar Kopien gehofft. Ich werde es versuchen.

Anmerkungen zum Entwurf: Ich wollte die Speichernutzung minimieren und damit die Geschwindigkeit erhöhen - daher gibt es kein Kopieren/Mutieren von Zeichenketten. Ich nehme an, 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-Wort hinzu - IndexOf bezieht sich auf den folgenden Parameter. Stellen Sie also stattdessen etwas voran.
  • Verwenden Sie nicht "caseInsensitive" Präfix würde sooooo lang sein
  • "Natürlich" ist ein guter Kandidat, denn Vergleiche, bei denen die Groß- und Kleinschreibung standardmäßig berücksichtigt wird, sind für den Menschen in erster Linie nicht natürlich.

Warum nicht...:

  • toLowerCase() - mögliche wiederholte Aufrufe von toLowerCase für dieselbe Zeichenfolge.
  • RegExp - umständlich, mit Variable zu suchen. Sogar das RegExp-Objekt ist umständlich, da es Zeichen entschlüsseln muss

4 Stimmen

@RolandIllig Autsch. Meine Antwort geht nicht auf andere Kulturen ein, das ist ein Nachteil. Ich würde jede Einsicht in die Ausweitung der Unterstützung für mehr Kulturen begrüßen, die Welt ist ein besserer Ort mit Mitarbeitern.

3voto

A-Sharabiani Punkte 15310

Si referrer ein Array ist, können Sie mit findIndex()

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

0voto

Hier ist meine Meinung dazu:

Drehbuch :

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

0voto

seunggabi Punkte 1430

Es ist besser~!

if (~referrer.toUpperCase().indexOf("RAL")) { 
    console.log("includes")
}

enter image description here

3 Stimmen

Wie kann das "besser" sein?

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