Hoe controleer ik of een string een substring bevat?

Ik heb een winkelwagentje dat productopties in een dropdown menu weergeeft en als ze "yes" selecteren, wil ik enkele andere velden op de pagina zichtbaar maken.

Het probleem is dat de winkelwagen ook de prijsmodifier in de tekst bevat, die voor elk product anders kan zijn. De volgende code werkt:

$(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();
        }
    });
});

Ik zou echter liever iets als dit gebruiken, wat niet'werkt:

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

Ik wil de actie alleen uitvoeren als de geselecteerde optie het woord "Yes" bevat, en zou de prijsmodifier negeren.

Oplossing

Zoals dit:

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

...of je kunt de tilde operator gebruiken:

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

Dit werkt omdat indexOf() -1 teruggeeft als de string helemaal niet gevonden is.

Merk op dat dit hoofdlettergevoelig is.
Als je een hoofdletter-ongevoelige zoekopdracht wilt, kun je schrijven

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

Of,

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

Je zou hiervoor search of match kunnen gebruiken.

str.search( 'Ja' )

geeft de positie van de overeenkomst terug, of -1 als hij'niet gevonden is.

Commentaren (10)

Een andere manier:

var testStr = "This is a test";

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

Getest op Firefox, Safari 6 en Chrome 36

Commentaren (4)