Kako preverim, ali niz vsebuje podrezaje?

Imam nakupovalno košarico, ki prikazuje možnosti izdelka v spustnem meniju in če izberejo "yes", želim narediti nekatera druga polja na strani vidna.

Težava je v tem, da nakupovalna košarica v besedilo vključuje tudi modifikator cene, ki je lahko za vsak izdelek drugačen. Naslednja koda deluje:

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

Vendar bi raje uporabil nekaj takega, kar pa ne deluje:

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

Ukrep želim izvesti le, če izbrana možnost vsebuje besedo "Yes", modifikatorja cene pa ne bi upošteval.

Rešitev

Kot je ta:

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

...ali pa uporabite operator tilde:

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

To deluje, ker indexOf() vrne -1, če niza sploh nismo našli.

Upoštevajte, da se pri tem razlikujejo velike in male črke.
Če želite iskanje brez upoštevanja velikih in malih črk, lahko napišete

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

Ali,

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

Za to lahko uporabite search ali match.

str.search( 'Yes' )

vrne položaj ujemanja ali -1, če ujemanja ni bilo najdeno.

Komentarji (10)

Druga možnost:

var testStr = "This is a test";

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

Preizkušeno v brskalnikih Firefox, Safari 6 in Chrome 36

Komentarji (4)