Apuntes sobre Php

PHP: Porque a veces necesitas un poco de caos en tu vida.

Patrones Comunes

Vamos a ver algunos patrones comunes y usar modificadores (i, m, s) con funciones PCRE.

Validación de Correos Electrónicos

Un correo típico sigue el formato usuario@dominio.sufijo. Ejemplo de patrón:

<?php

$email = "usuario@dominio.com";
$patron = '/^[\w\.\-]+@[\w\-]+\.[\w]{2,}$/';
// Coincide: "usuario@dominio.com", "test@ejemplo.es".
// No coincide: "usuario@", "@dominio", "a b@c.com".
preg_match($patron, $email);
?>
  • ^ Inicio de la cadena. Asegura que la validación empiece desde el primer carácter.
  • [\w\.\-]+ Parte local del correo:
    • \w equivale a [a-zA-Z0-9_], es decir, letras, números y guion bajo.
    • \. permite puntos (escapado con \\ porque el punto tiene significado especial).
    • \- permite guiones (también escapado).
    • + significa “uno o más” caracteres válidos.
  • @ El símbolo obligatorio que separa la parte local del dominio.
  • [\w\-]+ Parte del dominio:
    • Letras, números, guion bajo o guion normal (-).
    • Al menos un carácter (por el +).
  • \. El punto que separa el dominio de la extensión (escapado como \\.).
  • [\w]{2,} Extensión del dominio:
    • Al menos 2 caracteres de tipo letra, número o guion bajo.
  • $ Fin de la cadena. Garantiza que no haya texto adicional después del correo.

Nota: Este patrón es básico. Para correos más complejos, usa filter_var($email, FILTER_VALIDATE_EMAIL).

Otros Patrones Comunes

  • URLs:
<?php

$texto = "Visita http://www.ejemplo.com";
$patron = "/https?:\/\/[a-zA-Z0-9.]+\.(com|net|org)/";
// Coincide: "http://www.ejemplo.com", "https://test.net".
// No coincide: "ftp://", "http://ejemplo".
?>
  • Números:
<?php

$texto = "Edad: 25";
$patron = "/\d+/";
// Coincide: "25", "123".
// No coincide: "abc", "12.34".
preg_match($patron, $texto);
?>
  • Fechas (dd-mm-yyyy):
<?php

$texto = "24-09-2003";
$patron = "/\d{2}-\d{2}-\d{4}/";
// Coincide: "24-09-2003".
// No coincide: "2-9-2003", "24/09/2003".
preg_match($patron, $texto);
?>

Modificadores

Los modificadores se añaden tras el delimitador (por ejemplo, /patron/i):

  • i: Ignora mayúsculas/minúsculas.
  • m: Trata la cadena como multilínea (afecta a ^ y $).
  • s: Permite que . coincida con nuevas líneas.

Seguridad

  • Sanitización: Valida entradas antes de procesarlas:

Patrones comunes reutilizables en expresiones regulares

Hace años, la búsqueda de patrones regulares reutilizables para funciones básicas (validar correos en formularios, etc) era como la búsqueda del Santo Grial, siendo difícil encontrar una expresión que cubriera todos los casos. Estas son algunas muestras, pero ten en cuenta que aún razonablemente robustas para tareas comunes, existen funciones específicas como filter_var(). Sin embargo aprender a construir tus propias expresiones te permite personalizar, entender y depurar mejor tus sistemas.

Tabla de patrones

Propósito Patrón Descripción Ejemplos válidos
Email /^[\w.\-]+@[\w\-]+\.[a-z]{2,}$/i Validación básica de correos: parte local, dominio y extensión. ana@web.com
juan.perez@mi-empresa.net
URL /https?:\/\/[\w\-\.]+\.(com|net|org)(\/\S*)?/ Coincide con URLs que comienzan con http o https y tienen dominio común. http://web.com
https://sub.dominio.net/pagina
Teléfono /^\+?[0-9\s().-]{7,20}$/ Acepta +, espacios, paréntesis, guiones, entre 7 y 20 caracteres. +34 600 123 456
(91) 123-4567
Código postal /^[0-9]{5}$/ Exactamente 5 cifras numéricas. 28001
50012
DNI /^[0-9]{8}[A-Za-z]$/ 8 cifras seguidas de una letra. 12345678Z

Recuerda: Estos patrones están pensados para validación práctica, no para cubrir todos los casos del estándar. Para validaciones más estrictas usa filter_var(). Acompaña siempre la regex con controles adicionales (longitud máxima, lista blanca de dominios, etc.).

Recapitulación

  • Para validar correos, el patrón /^[\w.\-]+@[\w\-]+\.[\w]{2,}$/i cubre los casos más comunes. Para validación estricta, usa filter_var($email, FILTER_VALIDATE_EMAIL).
  • Los modificadores se añaden tras el delimitador: i (insensible a mayúsculas), m (multilínea: ^ y $ aplican a cada línea), s (. coincide con nueva línea también).
  • Para URLs: /https?:\/\/[\w\-\.]+\.(com|net|org)(\/\S*)?/. Para fechas dd-mm-yyyy: /\d{2}-\d{2}-\d{4}/. Para teléfonos: /^\+?[0-9\s().-]{7,20}$/.
  • La biblioteca filter_var() y sus constantes FILTER_VALIDATE_* son más robustas que las regex manuales para correos, URLs e IPs.

En la próxima lección: lookahead, lookbehind y técnicas avanzadas de regex.

TOP