¿Cómo compruebo si la cadena contiene una subcadena? [duplicar]

Resuelto Jordan Garis asked hace 14 años • 12 respuestas

Tengo un carrito de compras que muestra opciones de productos en un menú desplegable y si seleccionan "sí", quiero que otros campos de la página sean visibles.

El problema es que el carrito de la compra también incluye en el texto el modificador de precio, 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, prefiero 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.

Jordan Garis avatar Aug 14 '10 04:08 Jordan Garis
Aceptado

Como esto:

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

...o puedes usar el operador de tilde:

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

Esto funciona porque indexOf()regresa -1si 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))

Esta última es una expresión regular o regex .

Desglose de expresiones regulares:

  • /indica que esto es una expresión regular
  • yessignifica que la expresión regular encontrará esos caracteres exactos en ese orden exacto
  • /termina la expresión regular
  • iestablece la expresión regular como sensible a mayúsculas y minúsculas
  • .test(str)determina si la expresión regular coincide. str En resumen, significa que verá si puede encontrar las letras y, ey sen ese orden exacto, sin distinguir entre mayúsculas y minúsculas, en la variablestr
SLaks avatar Aug 13 '2010 21:08 SLaks

Puede utilizar la búsqueda o la coincidencia para esto.

str.search( 'Yes' )

devolverá la posición de la coincidencia, o -1 si no se encuentra.

hookedonwinter avatar Aug 13 '2010 21:08 hookedonwinter

Es bastante tarde para escribir esta respuesta, pero pensé en incluirla de todos modos. String.prototypeahora tiene un método includesque puede verificar la subcadena. Este método distingue entre 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 comprobar si hay una subcadena, se puede adoptar el siguiente enfoque:

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

Consulte la documentación para saber más.

Munim avatar May 07 '2016 13:05 Munim