Apuntes 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
declare(strict_types=1);

$email = "usuario@dominio.com";
$patron = "$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
declare(strict_types=1);

$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
declare(strict_types=1);

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

$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 díficil 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 absolutamente todos los casos del estándar.
  • Para validaciones más estrictas o complejas, se puede usar filter_var() o bibliotecas externas.
  • Es recomendable acompañar la validación con controles adicionales (por ejemplo, longitud máxima de email, dominio permitido, etc.).
TOP