How do I check if string contains substring? [duplicate]

How do I check if string contains substring? [duplicate]

This question already has an answer here:

How to check whether a string contains a substring in JavaScript?

3 answers

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:
$(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.

Solutions/Answers:

Solution 1:

Like this:

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))

Solution 2:

You could use search or match for this.

str.search( 'Yes' )

will return the position of the match, or -1 if it isn’t found.

Solution 3:

Another way:

var testStr = "This is a test";

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

** Tested on Firefox, Safari 6 and Chrome 36 **

Solution 4:

It’s pretty late to write this answer, but I thought of including it anyhow. String.prototype now has a method includes which can check for substring. This method is case sensitive.

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

To check for a substring, the following approach can be taken:

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

Check out the documentation to know more.

Solution 5:

ECMAScript 6 introduces String.prototype.includes, previously named contains.

It can be used like this:

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

It also accepts an optional second argument which specifies the position at which to begin searching:

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

It can be polyfilled to make it work on old browsers.

Solution 6:

You can use this Polyfill in ie and chrome

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