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
$mensajecontiene una cadena simple con la descripción del estado.str_contains($mensaje, "enviado")recorre la cadena principal para buscar la subcadena exacta"enviado"y devuelvetrueporque aparece en la posición 7.- El bloque
ifse 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ón | Devuelve | Mayúsculas/minúsculas | Versión de PHP |
|---|---|---|---|
str_contains() | bool | Sensible | 8.0+ |
strpos() | int|false | Sensible | 4+ |
stripos() | int|false | Insensible | 5+ |
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().