Comprobando el inicio de una cadena en PHP: todas las formas y trampas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

«¿Mi cadena comienza con esta palabra?» — la eterna pregunta del desarrollador PHP

\n\n

Imagina la situación: estás escribiendo un analizador de URL, procesando solicitudes entrantes o simplemente filtrando una lista de archivos. Y surge la tarea: necesitas verificar si una cadena comienza con un conjunto específico de caracteres. Parecería que no podría ser más simple. Pero no fue así. Hasta hace poco, PHP no tenía una función incorporada para esta operación tan simple. Los desarrolladores se las ingeniaban como podían: algunos cortaban la cadena con substr(), otros buscaban la posición con strpos(), y otros se adentraban en el intrincado mundo de las expresiones regulares.

\n\n

En este artículo, desglosaremos todas las formas de verificar el inicio de una cadena en PHP. No solo aprenderás cómo hacerlo «de forma elegante» en versiones modernas, sino también cómo resolver la tarea en proyectos «heredados» donde PHP 5 todavía está en uso. ¡Allá vamos!

\n\n

La forma más correcta: str_starts_with() (PHP 8.0+)

\n\n

Si tu proyecto funciona con PHP 8.0 o superior, eres un afortunado. Tienes disponible la función nativa str_starts_with(), que hace exactamente lo que dice en la etiqueta. Acepta dos argumentos: la cadena original y la subcadena que buscamos al inicio. Devuelve true o false.

\n\n
<?php\n$url = "https://pythonlib.ru/php-tutorial";\n\nif (str_starts_with($url, "https://")) {\n    echo "Enlace seguro, usamos HTTPS";\n} else {\n    echo "¡Atención! Conexión no HTTPS";\n}\n// Muestra: Enlace seguro, usamos HTTPS\n?>
\n\n

¿Por qué es la mejor opción?

\n
    \n
  • Legibilidad — el código habla por sí mismo. No necesitas comentar qué hace esta línea.
  • \n
  • Rendimiento — la función está optimizada a nivel de código C de PHP. Funciona más rápido que las comprobaciones manuales.
  • \n
  • Seguridad — sin problemas con codificaciones multibyte (a menos que trabajes con UTF-8 de una manera especial, pero hablaremos de eso más adelante).
  • \n
\n\n

Por cierto, la función tiene una «hermana gemela» — str_ends_with(), que verifica el final de la cadena. Pero ese es tema para otro artículo.

\n\n

El clásico del género: strpos()

\n\n

Antes de la llegada de str_starts_with(), la forma más popular era usar la función strpos(). Busca la primera aparición de una subcadena dentro de una cadena y devuelve su posición (un número). Si no se encuentra la subcadena, devuelve false.

\n\n

El truco está en que si la subcadena está al principio, su posición será 0. Y 0 en PHP es un valor falsy. Por lo tanto, la comprobación debe ser estricta:

\n\n
<?php\n$string = "¡Hola, mundo!";\n\nif (strpos($string, "¡Hola") === 0) {\n    echo "La cadena comienza con ¡Hola";\n} else {\n    echo "No, el inicio es otro";\n}\n?>
\n\n

¡Importante! Usa siempre el operador de comparación estricta ===, no ==. ¿Por qué? Imagina que buscas una subcadena que no existe. strpos() devolverá false. Si escribes strpos($string, "test") == 0, entonces false == 0 dará true (porque PHP convierte tipos). Y tu código dirá que la cadena comienza con "test", aunque no sea así. ¡Una trampa clásica para principiantes!

\n\n

Ventajas y desventajas de strpos()

\n
    \n
  • ✅ Funciona en todas las versiones de PHP, desde la 4.
  • \n
  • ✅ No requiere instalar extensiones.
  • \n
  • ❌ El código es menos legible — hay que recordar la comparación estricta.
  • \n
  • ❌ Si se usa incorrectamente (sin ===), produce errores difíciles de detectar.
  • \n
\n\n

El método del abuelo: substr()

\n\n

Otra forma que nos llega desde las profundidades de la historia. La idea es simple: extraer de la cadena un trozo de la misma longitud que la subcadena buscada y compararlos.

\n\n
<?php\n$filename = "reporte_2024.pdf";\n\n$prefix = "reporte_";\nif (substr($filename, 0, strlen($prefix)) === $prefix) {\n    echo "Este es el informe de 2024";                

Blogs

Book Recommendations