Saltar al contenido

¿Cómo verifico si un string contiene una palabra específica?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *