Jak sprawdzić czy łańcuch zawiera podłańcuch?

Mam koszyk na zakupy, który wyświetla opcje produktów w menu rozwijanym i jeśli wybiorą "tak", chcę, aby niektóre inne pola na stronie były widoczne.

Problem polega na tym, że koszyk zawiera również modyfikator ceny w tekście, który może być inny dla każdego produktu. Poniższy kod działa:

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

Jednak wolałbym użyć czegoś takiego, co nie działa:

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

Chcę wykonać akcję tylko wtedy, gdy wybrana opcja zawiera słowo "Tak", i zignorowałbym modyfikator ceny.

Rozwiązanie

Na przykład to:

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

...lub możesz użyć operatora tyldy:

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

To działa, ponieważ indexOf() zwraca -1, jeśli łańcuch nie został'znaleziony w ogóle.

Zauważ, że w tym przypadku rozróżniana jest wielkość liter.
Jeśli chcesz, aby wyszukiwanie nie uwzględniało wielkości liter, możesz napisać

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

Lub,

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

Możesz użyć do tego search lub match.

str.search( 'Tak' )

zwróci pozycję dopasowania, lub -1 jeśli nie zostanie znalezione.

Komentarze (10)

Inny sposób:

var testStr = "This is a test";

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

Testowane na Firefox, Safari 6 i Chrome 36 .

Komentarze (4)