Hacemos una revisión exhaustiva cada noticia en nuestra web con el objetivo de mostrarte siempre la información más veraz y actual.
Puedes usar el strpos()
función que se usa para encontrar la ocurrencia de una string dentro de otro:
$a = 'How are you?';
if (strpos($a, 'are') !== false)
echo 'true';
Tenga en cuenta que el uso de !== false
es deliberado (ni != false
ni === true
devolverá el resultado deseado); strpos()
devuelve el desplazamiento en el que la aguja string comienza en el pajar string, o el booleano false
si no se encuentra la aguja. Dado que 0 es un desplazamiento válido y 0 es “falso”, no podemos usar construcciones más simples como !strpos($a, 'are')
.
Editar:
Ahora con PHP 8 puedes hacer esto:
if (str_contains('How are you', 'are'))
echo 'true';
RFC
str_contains
Puede utilizar expresiones regulares, ya que es mejor para la concordancia de palabras en comparación con strpos
, como lo mencionan otros usuarios. A strpos
comprobar are
también volverá true para cadenas como: tarifa, cuidado, mirada, etc. Estas coincidencias no deseadas pueden simplemente evitarse en la expresión regular mediante el uso de límites de palabras.
Un simple partido para are
podría verse algo como esto:
$a = 'How are you?';
if (preg_match('/bareb/', $a))
echo 'true';
Por el lado del rendimiento, strpos
es aproximadamente tres veces más rápido. Cuando hice un millón de comparaciones a la vez, tomó preg_match
1,5 segundos para terminar y por strpos
tomó 0.5 segundos.
Editar: para buscar en cualquier parte del string, no solo palabra por palabra, recomendaría usar una expresión regular como
$a = 'How are you?';
$search = 'are y';
if(preg_match("/$search/i", $a))
echo 'true';
El i
al final de la expresión regular cambia la expresión regular para que no distinga entre mayúsculas y minúsculas; si no lo desea, puede omitirla.
Ahora bien, esto puede ser bastante problemático en algunos casos, ya que $ search string no está desinfectado de ninguna manera, quiero decir, es posible que no pase el control en algunos casos como si $search
es una entrada del usuario que pueden agregar algunos string que podría comportarse como una expresión regular diferente …
Además, aquí hay una gran herramienta para probar y ver explicaciones de varias expresiones regulares Regex101
Para combinar ambos conjuntos de funcionalidades en una única función multipropósito (incluso con distinción entre mayúsculas y minúsculas seleccionable), puede usar algo como esto:
function FindString($needle,$haystack,$i,$word)
// $i should be "" or "i" for case insensitive
if (strtoupper($word)=="W")
// if $word is "W" then word search instead of string in string search.
if (preg_match("/b$needleb/$i", $haystack))
return true;
else
if(preg_match("/$needle/$i", $haystack))
return true;
return false;
// Put quotes around true and false above to return them as strings instead of as bools/ints.
Una cosa más a tener en cuenta es que b
no funcionará en otros idiomas además del inglés.
La explicación de esto y la solución se toman de aquí:
b
representa el principio o el final de una palabra (límite de palabra). Esta expresión regular coincidiría con la manzana en un pastel de manzana, pero no con la manzana en la piña, los carritos de manzana o las manzanas para hornear.¿Qué tal “café”? ¿Cómo podemos extraer la palabra “café” en expresiones regulares? En realidad, bcafé b no funcionaría. ¿Por qué? Porque “café” contiene caracteres no ASCII: é. b no se puede usar simplemente con Unicode como समुद्र, 감사, месяц y.
Cuando desee extraer caracteres Unicode, debe definir directamente los caracteres que representan los límites de las palabras.
La respuesta:
(?<=[s,.:;"']|^)UNICODE_WORD(?=[s,.:;"']|$)
Entonces, para usar la respuesta en PHP, puede usar esta función:
function contains($str, array $arr) $)/', $str)) return true;
Y si quieres buscar array de palabras, puedes usar esto:
function arrayContainsWord($str, array $arr)
foreach ($arr as $word) ^)' . $word . '(?=[s,.:;"']
return false;
A partir de PHP 8.0.0 ahora puede usar str_contains
Aquí hay una pequeña función de utilidad que es útil en situaciones como esta
// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
return strpos($haystack, $needle) !== false;
Si aceptas, eres capaz de dejar un escrito acerca de qué te ha impresionado de este ensayo.