snippetjavascriptCritical
How do I check if string contains substring?
Viewed 0 times
howchecksubstringstringcontains
Problem
I have a shopping cart that displays product options in a dropdown menu and if they select "yes", I want to make some other fields on the page visible.
The problem is that the shopping cart also includes the price modifier in the text, which can be different for each product. The following code works:
However I would rather use something like this, which doesn't work:
I only want to perform the action if the selected option contains the word "Yes", and would ignore the price modifier.
The problem is that the shopping cart also includes the price modifier in the text, which can be different for each product. The following code works:
$(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();
}
});
});However I would rather use something like this, which doesn't work:
$(document).ready(function() {
$('select[id="Engraving"]').change(function() {
var str = $('select[id="Engraving"] option:selected').text();
if (str *= "Yes") {
$('.engraving').show();
} else {
$('.engraving').hide();
}
});
});I only want to perform the action if the selected option contains the word "Yes", and would ignore the price modifier.
Solution
Like this:
...or you can use the tilde operator:
This works because
Note that this is case-sensitive.
If you want a case-insensitive search, you can write
Or:
The latter is a regular expression or regex.
Regex breakdown:
To sum it up, it means it will see if it can find the letters
if (str.indexOf("Yes") >= 0)...or you can use the tilde operator:
if (~str.indexOf("Yes"))This works because
indexOf() returns -1 if the string wasn't found at all.Note that this is case-sensitive.
If you want a case-insensitive search, you can write
if (str.toLowerCase().indexOf("yes") >= 0)Or:
if (/yes/i.test(str))The latter is a regular expression or regex.
Regex breakdown:
/indicates this is a regex
yesmeans that the regex will find those exact characters in that exact order
/ends the regex
isets the regex as case-insensitive
.test(str)determines if the regular expression matchesstr
To sum it up, it means it will see if it can find the letters
y, e, and s in that exact order, case-insensitively, in the variable strCode Snippets
if (str.indexOf("Yes") >= 0)if (~str.indexOf("Yes"))if (str.toLowerCase().indexOf("yes") >= 0)if (/yes/i.test(str))Context
Stack Overflow Q#3480771, score: 2391
Revisions (0)
No revisions yet.