Función en PHP para comprobar si un email es válido - Explicación
Algunos me habéis pedido que os explique cómo funciona el sencillo script que publiqué el otro día:
if (ereg("([A-Za-z0-9_.-]+@[A-Za-z0-9_.-]+\.[A-Za-z0-9_-]+)", $email, $resultado))
{
echo $resultado[1];
}
Pues vamos a analizarlo un poco.
La función ereg analiza la cadena $email, buscando si hay texto que se ajuste al patrón:
[A-Za-z0-9_.-]+@[A-Za-z0-9_.-]+\.[A-Za-z0-9_-]+
y almacene el resultado en el array $resultado.
El patrón parece algo críptico pero es bastante sencillo:
[A-Za-z0-9_.-] : sirve para indicar que buscamos un texto que contenga las letras de la ‘A’ a la ‘Z’, de la ‘a’ a la ‘z’, dígitos entre 0 y 9 y los símbolos ‘_’, ‘.’ y ‘-’.
El símbolo + a continuación indica que pueden ser uno o más caracteres.
Un email suele estar compuesto de las siguientes partes:
usuario@subdomino1.subdominio2.dominio.extensión
(no son los nombres correctos pero los pongo así para entendernos).
con el patrón que hemos usado quedaría algo así:
usuario: [A-Za-z0-9_.-]+
@: @
[A-Za-z0-9_\.-]+: subdomino1.subdominio2.dominio
.extensión: \.[A-Za-z0-9_-]+
Nótese que la extensión no admite ningún ‘.’.
Actualización: He corregido un pequeño un error en el patrón que hacía que aceptase emails con una barra invertida, como por ejemplo:
paco@email.com