¿Cómo compruebo si la cadena contiene una subcadena? [duplicar]
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.
Como esto:
if (str.indexOf("Yes") >= 0)
...o puedes usar el operador de tilde:
if (~str.indexOf("Yes"))
Esto funciona porque indexOf()
regresa -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))
Esta última es una expresión regular o regex .
Desglose de expresiones regulares:
/
indica que esto es una expresión regularyes
significa que la expresión regular encontrará esos caracteres exactos en ese orden exacto/
termina la expresión regulari
establece 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 letrasy
,e
ys
en ese orden exacto, sin distinguir entre mayúsculas y minúsculas, en la variablestr
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.
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 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.