it-swarm.com.de

Wie überprüfe ich, ob der String einen Teilstring enthält?

Ich habe einen Einkaufswagen, in dem die Produktoptionen in einem Dropdown-Menü angezeigt werden. Wenn Sie "Ja" auswählen, möchte ich einige andere Felder auf der Seite sichtbar machen.

Das Problem ist, dass der Warenkorb auch den Preismodifikator enthält, der für jedes Produkt unterschiedlich sein kann. Der folgende Code funktioniert:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str == "Yes (+ $6.95)") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

Allerdings würde ich lieber so etwas verwenden, was nicht funktioniert:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str *= "Yes") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

Ich möchte die Aktion nur ausführen, wenn die ausgewählte Option das Wort "Ja" enthält und den Preismodifikator ignorieren würde.

947
Jordan Garis

So was:

if (str.indexOf("Yes") >= 0)

... oder Sie können den Tilde-Operator verwenden:

if (~str.indexOf("Yes"))

Dies funktioniert, weil indexOf()-1 zurückgibt, wenn der String überhaupt nicht gefunden wurde.

Beachten Sie, dass dies zwischen Groß- und Kleinschreibung unterscheidet.
Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen möchten, können Sie schreiben

if (str.toLowerCase().indexOf("yes") >= 0)

Oder,

if (/yes/i.test(str))
2045
SLaks

Sie können hierfür Suche oder Übereinstimmung verwenden.

str.search( 'Yes' )

gibt die Position des Matches zurück oder -1, wenn es nicht gefunden wird.

117
hookedonwinter

Ein anderer Weg:

var testStr = "This is a test";

if(testStr.contains("test")){
    alert("String Found");
}

** Getestet unter Firefox, Safari 6 und Chrome 36 **

26
Andy Braham

Es ist ziemlich spät, diese Antwort zu schreiben, aber ich dachte trotzdem daran, sie aufzunehmen. String.prototype hat jetzt eine Methode includes, die nach Teilzeichenfolgen suchen kann. Diese Methode unterscheidet zwischen Groß- und Kleinschreibung.

var str = 'It was a good date';
console.log(str.includes('good')); // shows true
console.log(str.includes('Good')); // shows false

Um nach einer Teilzeichenfolge zu suchen, können Sie wie folgt vorgehen:

if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
    // mainString contains substringToCheck
}

Lesen Sie die Dokumentation , um mehr zu erfahren.

26
Munim Dibosh

ECMAScript 6 führt String.prototype.includes ein, zuvor contains genannt.

Es kann so verwendet werden:

_'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false
_

Es akzeptiert auch ein optionales zweites Argument, das die Position angibt, an der die Suche beginnen soll:

_'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true
_

Es kann polyfilled sein, damit es in alten Browsern funktioniert.

13
Oriol

Sie können dieses Polyfill in ie und chrome verwenden

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}
8
robkorv

Gibt zurück, wie oft das Schlüsselwort in der Zeichenfolge enthalten ist.

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
8
Kareem

Die Methode includes () bestimmt, ob eine Zeichenfolge in einer anderen Zeichenfolge gefunden werden darf, und gibt je nach Bedarf true oder false zurück.

Syntax: -string.includes (searchString [ position])

searchString: Eine Zeichenfolge, nach der in dieser Zeichenfolge gesucht werden soll.

position: -Optional. Die Position in dieser Zeichenfolge, an der die Suche nach searchString beginnen soll. Der Standardwert ist 0.

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 
5
Parth Raval

Ich weiß, dass der beste Weg str.indexOf(s) !== -1;http://hayageek.com/javascript-string-contains/ ist

Ich schlage einen anderen Weg vor (str.replace(s1, "") !== str):

var str = "Hello World!", s1 = "Ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);
3

Wenn Sie in der Lage sind, Bibliotheken zu verwenden, können Sie feststellen, dass Lo-Dash JS-Bibliothek sehr nützlich ist. In diesem Fall überprüfen Sie _.contains() (ersetzt durch _.includes() ab Version 4).

(Hinweis Die Lo-Dash-Konvention nennt das Bibliotheksobjekt _. Vergessen Sie nicht, die Installation auf derselben Seite zu überprüfen, um sie für Ihr Projekt einzurichten.)

_.contains("foo", "oo");     // → true
_.contains("foo", "bar");    // → false
// Equivalent with:
_("foo").contains("oo");     // → true
_("foo").contains("bar");    // → false

In Ihrem Fall gehen Sie vor und verwenden Sie:

_.contains(str, "Yes");
// or:
_(str).contains("Yes");

..was auch immer du besser magst.

2
Selfish

Sie können auch überprüfen, ob das genaue Wort in einer Zeichenfolge enthalten ist. Z.B.:

function containsWord(haystack, needle) {
    return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}

Verwendungszweck:

containsWord("red green blue", "red"); // true
containsWord("red green blue", "green"); // true
containsWord("red green blue", "blue"); // true
containsWord("red green blue", "yellow"); // false

So macht jQuery seine hasClass-Methode.

1
bashaus

Keines der oben genannten Probleme hat bei mir funktioniert, da Leerzeichen vorhanden waren, aber das habe ich getan

tr = table.getElementsByTagName("tr");

    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[0];
        bottab.style.display="none";
        bottab2.style.display="none";
        if (td) {
        var getvar=td.outerText.replace(/\s+/, "") ;

            if (getvar==filter){
                tr[i].style.display = "";
            }else{
                tr[i].style.display = "none";
            }

        }
    }
0