Как проверить, содержит ли строка подстроку?
Описание проблемы:
У меня есть корзина покупок, в которой товары отображаются в выпадающем меню. Если пользователь выбирает "да", то я хочу сделать некоторые другие поля на странице видимыми.
Проблема в том, что текст выбора в корзине также включает модификатор цены, который может варьироваться для каждого товара. У меня есть следующий работающий код:
$(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();
}
});
});
Я хочу выполнить действие только в том случае, если выбранный вариант содержит слово "Yes", игнорируя модификатор цены. Как мне это сделать?
5 ответ(ов)
Чтобы проверить, содержится ли подстрока "Да" в строке, вы можете использовать метод indexOf()
:
if (str.indexOf("Да") >= 0)
...или вы можете использовать оператор тильда:
if (~str.indexOf("Да"))
Это работает потому, что метод indexOf()
возвращает -1
, если подстрока не была найдена.
Обратите внимание, что этот метод чувствителен к регистру.
Если вы хотите выполнить поиск без учета регистра, вы можете написать:
if (str.toLowerCase().indexOf("да") >= 0)
Или:
if (/да/i.test(str))
Последний вариант использует регулярное выражение или regex.
Разбор регулярного выражения:
/
указывает на то, что это регулярное выражениеда
означает, что regex будет искать эти точные символы в этом точном порядке/
завершает регулярное выражениеi
устанавливает регулярное выражение как нечувствительное к регистру.test(str)
определяет, соответствует ли регулярное выражение переменнойstr
В итоге это означает, что проверка будет искать буквы д
, а
в указанном порядке, без учета регистра, в переменной str
.
Метод includes()
определяет, содержится ли одна строка в другой строке, возвращая true
или false
в зависимости от результата проверки.
Синтаксис: string.includes(searchString[, position])
- searchString: Строка, которую необходимо найти в данной строке.
- position: Необязательный параметр. Позиция в данной строке, с которой начнется поиск
searchString
; по умолчанию равна 0.
string = 'LOL';
console.log(string.includes('lol')); // возвращает false
console.log(string.includes('LOL')); // возвращает true
Обратите внимание, что метод includes()
учитывает регистр букв, поэтому строка 'lol'
не найдена в строке 'LOL'
, так как регистры различаются.
Вы можете использовать этот полифилл для поддержки метода contains
в IE и Chrome:
if (!('contains' in String.prototype)) {
String.prototype.contains = function (str, startIndex) {
"use strict";
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
Этот код проверяет, существует ли метод contains
в прототипе String
. Если его нет, он добавляет этот метод, который позволяет проверять, содержится ли указанная подстрока в строке, начиная с заданного индекса. Использование String.prototype.indexOf
помогает реализовать данную функциональность.
Да, вы правы, что лучший способ проверить, содержится ли подстрока в строке, — это использовать str.indexOf(s) !== -1
. Однако вы также можете использовать другой подход, основанный на методе replace
, как вы и предложили.
Ваш пример кода выглядит следующим образом:
var str = "Hello World!", s1 = "ello", s2 = "elloo";
alert(str.replace(s1, "") !== str); // Это будет true, так как "ello" есть в строке
alert(str.replace(s2, "") !== str); // Это будет false, так как "elloo" отсутствует
Этот способ работает, поскольку метод replace
возвращает новую строку с заменённой подстрокой. Если подстрока s1
присутствует в str
, результат замены будет отличаться от оригинала. В противном случае, если подстрока не найдена (как в случае с s2
), строка останется неизменной, и сравнение вернёт false
.
Тем не менее, стоит отметить, что данный способ менее читаем и производителен по сравнению с indexOf
. В большинстве случаев str.indexOf(s) !== -1
будет предпочтительнее, особенно для больших строк, так как он более прямолинеен и не создаёт новых строк в процессе.
Вот один из способов, как проверить наличие подстроки в строке на JavaScript:
var testStr = "This is a test";
if (testStr.includes("test")) {
alert("Строка найдена");
}
Метод includes()
проверяет, содержит ли строка указанную подстроку, и возвращает true
или false
. В данном случае, если присутствует "test", будет вызвано окно с сообщением "Строка найдена".
Тестировано в Firefox, Safari 6 и Chrome 36.
Как проверить, содержит ли строка подстроку в JavaScript?
Есть ли в Python метод подстроки 'contains' для строк?
Как проверить, содержит ли строка конкретное слово?
Как перенаправить на другую веб-страницу?
В чем разница между String.slice и String.substring?