Pregunta ¿Cómo puedo verificar si string contiene una subcadena? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tengo un carrito de compras que muestra las opciones del producto en un menú desplegable y si seleccionan "sí", quiero que otros campos de la página estén visibles.

El problema es que el carro de compras también incluye el modificador de precio en el texto, que puede ser diferente para cada producto. El siguiente código funciona:

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

Sin embargo, preferiría usar algo como esto, que no funciona:

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

Solo quiero realizar la acción si la opción seleccionada contiene la palabra "Sí" e ignoraría el modificador de precio.


853
2017-08-13 21:25


origen


Respuestas:


Me gusta esto:

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

... o puedes usar el operador de tilde:

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

Esto funciona porque indexOf() devoluciones -1 si la cadena no se encontró en absoluto.

Tenga en cuenta que esto distingue entre mayúsculas y minúsculas.
Si desea una búsqueda que no distinga entre mayúsculas y minúsculas, puede escribir

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

O,

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

1889
2017-08-13 21:28



Podrías usar buscar o partido para esto.

str.search( 'Yes' )

devolverá la posición del partido, o -1 si no se encuentra.


108
2017-08-13 21:29



De otra manera:

var testStr = "This is a test";

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

** Probado en Firefox, Safari 6 y Chrome 36 **


24
2018-02-20 19:44



Es bastante tarde para escribir esta respuesta, pero pensé en incluirla de todos modos. String.prototype ahora tiene un método includes que puede verificar la subcadena Este método es sensible a mayúsculas y minúsculas

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

Para verificar una subcadena, se puede tomar el siguiente enfoque:

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

Revisar la documentación para saber mas.


23
2018-05-07 13:38



ECMAScript 6 presenta String.prototype.includes, previamente llamado contains.

Se puede usar así:

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

También acepta un segundo argumento opcional que especifica la posición en la que comenzar la búsqueda:

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

Puede ser polyfilled para hacerlo funcionar en navegadores antiguos


9
2018-04-16 23:00



Puede usar este Polyfill en ie y cromo

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

7
2017-07-03 14:09



Devuelve el número de veces que la palabra clave está incluida en la cadena.

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

6
2017-10-18 05:12



El método includes () determina si una cadena se puede encontrar dentro de otra cadena, devolviendo verdadero o falso según corresponda.

Sintaxis: -string.includes (searchString [, position])

searchString: una cadena que se debe buscar dentro de esta cadena.

posición: -Opcional. La posición en esta cadena en la que comenzar a buscar searchString; por defecto es 0.

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

3
2017-11-18 17:45