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
+
).
- Letras, números, guion bajo o guion normal (
\.
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 |
---|---|---|---|
/^[\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.).