Wie prüfe ich, ob eine Zeichenkette eine Teilzeichenkette enthält?

Ich habe einen Einkaufswagen, der Produktoptionen in einem Dropdown-Menü anzeigt, und 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 im Text 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();
        }
    });
});

Ich würde aber lieber etwas wie das hier 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 durchführen, wenn die ausgewählte Option das Wort "Ja" enthält, und würde den Preismodifikator ignorieren.

Lösung

Zum Beispiel so:

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

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

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

Das funktioniert, weil indexOf() -1 zurückgibt, wenn die Zeichenkette überhaupt nicht gefunden wurde.

Beachten Sie, dass die Groß- und Kleinschreibung beachtet wird.
Wenn Sie eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung wünschen, können Sie schreiben

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

Oder,

if (/yes/i.test(str))
Kommentare (12)

Hierfür können Sie search oder match verwenden.

str.search( 'Ja' )

gibt die Position der Übereinstimmung zurück, oder -1, wenn sie nicht gefunden wird.

Kommentare (10)

Eine andere Möglichkeit:

var testStr = "This is a test";

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

Getestet mit Firefox, Safari 6 und Chrome 36

Kommentare (4)