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

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

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

Что не работает.

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

Я ценю любую помощь.

Ответы

Ответ 1

Вот так:

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

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

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

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

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

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

Или

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

Ответ 2

Вы можете использовать search или match для этого.

str.search( 'Yes' )

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

Ответ 3

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

var testStr = "This is a test";

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

** Проверено на Firefox, Safari 6 и Chrome 36 **

Ответ 4

Это довольно поздно, чтобы написать этот ответ, но я подумал о том, чтобы включить его в любом случае. 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
}

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

Ответ 5

Вы можете использовать этот Polyfill в ie и chrome

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}

Ответ 6

В ECMAScript 6 представлен String.prototype.includes, ранее названный contains.

Его можно использовать следующим образом:

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

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

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

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

Ответ 7

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

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;

Ответ 8

Я знаю, что лучший способ - str.indexOf(s) !== -1; http://hayageek.com/javascript-string-contains/

Я предлагаю другой способ (str.replace(s1, "") !== str):

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

Ответ 9

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

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.

Ответ 10

Если вы способны использовать библиотеки, вы можете обнаружить, что библиотека Lo-Dash очень полезна. В этом случае идите и проверьте _.contains() (заменяется на _.includes() как на v4).

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

_.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");

.. какой вам лучше.

Ответ 11

Метод includes() определяет, может ли одна строка быть найдена в другой строке, возвращая true или false соответственно.

Синтаксис: -string.includes(searchString [, position])

searchString: - Строка, которую нужно искать внутри этой строки.

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

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 

Ответ 12

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

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";
            }

        }
    }

Ответ 13

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

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

чтобы вы могли использовать его на своей странице в любом месте:

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

который возвращает true.

Обратитесь к сообщению ниже за дополнительными вспомогательными методами. Методы поддержки Javascript