PHP string contains para comprobar subcadenas

Para una comprobación de PHP string contains, usa str_contains() para validar si una cadena incluye otra y obtener un resultado booleano. Encaja en cláusulas de guarda, validaciones de rutas y comprobaciones de entrada cuando solo importa un sí/no. Frente a strpos(), evita el problema de tratar 0 como falsy y se lee con claridad sin !== false. str_contains() está disponible en PHP 8.0+.

Ejemplo de PHP string contains para comprobar subcadenas

Salida:

La salida aparecerá aquí...

Salida:

Estado: enviado

Cómo funciona este ejemplo

  1. $mensaje contiene una cadena simple con la descripción del estado.
  2. str_contains($mensaje, "enviado") recorre la cadena principal para buscar la subcadena exacta "enviado" y devuelve true porque aparece en la posición 7.
  3. El bloque if se ejecuta porque el valor devuelto ya es booleano, así que no hace falta una comparación con conversión de tipos.

¿Qué es str_contains en PHP?

str_contains(string $haystack, string $needle): bool es una función de PHP 8.0 que hace una comprobación de subcadena sensible a mayúsculas y segura a nivel binario. Devuelve true cuando $needle aparece en cualquier parte de $haystack, y false en caso contrario. Un $needle vacío siempre devuelve true: es un comportamiento definido en la especificación de PHP, no un bug.

Errores comunes con str_contains()

Esperar coincidencias sin distinguir mayúsculas y minúsculas

Incorrecto:

str_contains("Hello World", "hello"); // false

Correcto:

stripos("Hello World", "hello") !== false; // true

str_contains() diferencia mayúsculas y minúsculas. Para búsquedas sin esa distinción, usa stripos() !== false (o normaliza ambas cadenas antes de llamar a str_contains()).

Tratar strpos() como booleano (error típico al migrar)

Incorrecto:

if (strpos("enviado", "env")) echo "coincide"; // sin salida (0 es falsy)

Correcto:

if (strpos("enviado", "env") !== false) echo "coincide";

En PHP 8+, prefiere str_contains() cuando solo necesitas un booleano.

str_contains vs strpos vs stripos

FunciónDevuelveMayúsculas/minúsculasVersión de PHP
str_contains()boolSensible8.0+
strpos()int|falseSensible4+
stripos()int|falseInsensible5+

Usa str_contains() cuando solo necesites una comprobación booleana en PHP 8+. Usa strpos() cuando necesites la posición de coincidencia o debas dar soporte a PHP 7.x. Usa stripos() para comprobar contención sin distinguir mayúsculas y minúsculas cuando además necesites la posición de la coincidencia (devuelve el índice igual que strpos()).

FAQ

¿str_contains distingue mayúsculas y minúsculas?

Sí. str_contains("PHP", "php") devuelve false. Para comprobaciones sin distinción de mayúsculas, puedes pasar ambos argumentos por strtolower() antes de llamar a str_contains(), o usar stripos($haystack, $needle) !== false.

¿Por qué str_contains devuelve true para una cadena vacía?

Por definición, la cadena vacía es una subcadena de cualquier cadena. Esto coincide con el comportamiento de strpos("algo", ""), que devuelve 0 en PHP 8. Valida la entrada de usuario vacía antes de llamar a str_contains() si eso puede romper la lógica de tu código.

¿Cómo se comprueba “string contains” en PHP 7?

Usa strpos($haystack, $needle) !== false. La comparación estricta !== false es clave porque strpos() devuelve 0 cuando la subcadena está al inicio, y 0 es falsy en PHP. Este error típico es una de las razones principales por las que se introdujo str_contains().