Как проверить, содержит ли строка подстроку?

У меня есть корзина, которая отображает варианты товаров в выпадающем меню, и если они выбирают "да", я хочу сделать видимыми некоторые другие поля на странице.

Проблема в том, что корзина также включает модификатор цены в текст, который может быть разным для каждого продукта. Работает следующий код:

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

Однако я бы предпочел использовать что-то вроде этого, что не работает:

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

Я хочу выполнять действие, только если выбранный вариант содержит слово "Да", и игнорировать модификатор цены.

Комментарии к вопросу (3)
Решение

Например:

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

... или вы можете использовать оператор тильда:

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

Это работает, потому что indexOf() возвращает -1, если строка не была найдена вообще.

Обратите внимание, что это чувствительно к регистру.
Если вам нужен поиск без учета регистра, вы можете написать

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

Или,

if (/yes/i.test(str))
Комментарии (12)

Для этого можно использовать search или match.

str.search( 'Yes' )

вернет позицию совпадения или -1, если оно не найдено.

Комментарии (10)

Уже довольно поздно писать этот ответ, но я все равно решил его включить. У String.prototype теперь есть метод includes, который может проверять наличие подстроки. Этот метод чувствителен к регистру.

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

Чтобы проверить наличие подстроки, можно использовать следующий подход:

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

Ознакомьтесь с документацией, чтобы узнать больше.

Комментарии (2)

Другой способ:

var testStr = "This is a test";

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

Проверено на Firefox, Safari 6 и хром 36

Комментарии (4)

В ECMAScript 6 вводит строки.прототип.включает, ранее названный содержит.

Он может быть использован такой:

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

Он также принимает необязательный второй аргумент, который указывает позицию, с которой начинать поиск:

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

Это может быть polyfilled]2, чтобы заставить его работать на старых браузерах.

Комментарии (1)

Возвращает количество раз ключевое слово входит в строку.

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;
Комментарии (5)

Вы можете использовать этот полифилл в IE и Chrome

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}
Комментарии (2)

включает в себя() метод определяет, является ли одна строка в другую строку и возвращает true или false.

синтаксис :-строку.включает(searchString[, позиция])

searchString:-строку для поиска в этой строке.

должность:-необязательно. Положение в этой строке, с которой начинается поиск searchString; по умолчанию 0.

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 
Комментарии (1)

Я знаю, что лучший способ является STR.метод indexOf(ы) !== -1; http://hayageek.com/javascript-string-contains/

Я предлагаю другой способ (ул..заменить(С1 " Ну и") !== ул.):

в

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

в

Комментарии (0)

Если вы не способны использовать библиотеки, вы можете обнаружить, что Ло-тире библиотека JS-это довольно полезно. В этом случае, идти вперед и проверить _.содержит() (заменить `_.включает в себя () от В4).

(Примечание Ло-тире конвенции именования библиотеки объекта _. Дон'т забудьте проверить установки в той же странице, чтобы настроить его для вашего проекта.)

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

В вашем случае, идти вперед и использовать:

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

..какой вам больше нравится.

Комментарии (1)

Вы также можете проверить, если точные слова, содержащиеся в строке. Е. Г.:

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

Использование:

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

Это как jQuery делает его метода hasClass.

Комментарии (0)

Ни один из выше работал для меня, как были пустые места, но это то, что я сделал

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)

вы можете определить метод расширения и использовать его в дальнейшем.

String.prototype.contains = function(it) 
{ 
   return this.indexOf(it) != -1; 
};

так что вы можете использовать на Вашей странице в любом месте, таких как:

var str="hello how are you";
str.contains("are");

что возвращает правда.

См. ниже пост дополнительные вспомогательные методы расширения. Вспомогательные методы JavaScript

Комментарии (0)