«¿Y de esto qué más hay?»: cómo saber con qué empieza una cadena en PHP
\n\nTodo desarrollador se ha enfrentado al menos una vez a la pregunta: «¿Esta cadena comienza con una palabra, símbolo o prefijo específico?». Parece un detalle menor, pero de esto puede depender la lógica de enrutamiento, la validación de URLs, la verificación de correos electrónicos o el análisis de datos ingresados por el usuario. En PHP, como en cualquier otro lenguaje, hay varias formas de resolverlo. Pero, ¿cuál es la correcta? ¿Y cuál es la más eficiente? ¿Qué hacer si tienes una versión antigua de PHP?
\n\nEn este artículo analizaremos todas las formas populares de verificar el inicio de una cadena en PHP, desde los clásicos substr y strpos hasta el moderno str_starts_with, introducido en PHP 8.0. Aprenderás no solo «cómo», sino también «por qué» elegir un método u otro. ¡Allá vamos! 🚀
¿Para qué sirve verificar el inicio de una cadena?
\n\nImagina que estás escribiendo un analizador de logs, procesando URLs o filtrando archivos por extensión. O quizás necesitas filtrar todos los correos electrónicos que comienzan con «admin@». O verificar si una solicitud a la API tiene el prefijo correcto. En todos estos casos, necesitas lo mismo: saber si una cadena contiene una subcadena específica al principio.
\n\nParece una tarea trivial, pero no conocer los detalles puede provocar errores difíciles de detectar. Especialmente si usas strpos sin verificar si devuelve false. Analicemos cada método paso a paso.
Método n.º 1: str_starts_with (PHP 8.0+) — moderno y claro
\n\nA partir de PHP 8.0, el lenguaje incluye la función str_starts_with(). Hace exactamente lo que promete: verifica si una cadena comienza con una subcadena determinada. Y lo hace de forma rápida, legible y sin sorpresas.
<?php\n$url = "https://pythonlib.ru";\nif (str_starts_with($url, "https://")) {\n echo "La cadena comienza con https://";\n} else {\n echo "La cadena NO comienza con https://";\n}\n// Muestra: La cadena comienza con https://\n?>\n\n¿Por qué es genial?
\n- \n
- ✅ El código se lee como texto en inglés: «string starts with». \n
- ✅ Devuelve solo
trueofalse— sin comprobaciones adicionales. \n - ✅ Funciona correctamente con codificaciones multibyte (UTF-8). \n
- ✅ Distingue entre mayúsculas y minúsculas. Si necesitas ignorarlas, usa
str_starts_with(strtolower(...)). \n
Este método es el claro ganador si tienes PHP 8.0 o superior. Pero, ¿qué pasa si tu proyecto aún funciona con PHP 7? Sigue leyendo.
\n\nMétodo n.º 2: substr — un viejo amigo nunca falla
\n\nAntes de que existiera str_starts_with, muchos usaban substr para comparar el inicio de una cadena. La idea es simple: extraer un fragmento de la cadena con la longitud deseada y compararlo con la subcadena buscada.
<?php\n$string = "¡Hola, mundo!";\n$prefix = "¡Hola";\n\nif (substr($string, 0, strlen($prefix)) === $prefix) {\n echo "La cadena comienza con '¡Hola'";\n} else {\n echo "La cadena NO comienza con '¡Hola'";\n}\n?>\n\nVentajas:
\n- \n
- Funciona en cualquier versión de PHP. \n
- Lógica clara y sencilla. \n
Desventajas:
\n- \n
- Requiere recordar
strlen()— es fácil equivocarse con la longitud. \n - Si la cadena es más corta que el prefijo,
substrdevuelve una cadena vacía y la comparación falla (pero no se rompe). \n - Menos legible que la alternativa moderna. \n
Aun así, es una opción completamente funcional que no te defraudará. Solo recuerda usar la comparación estricta ===.
Método n.º 3: strpos — astuto pero peligroso
\n\nOtro enfoque clásico es usar strpos(). Esta función busca la primera aparición de una subcad