| Subcribe via RSS

Función en PHP para comprobar si un email es válido – Explicación

Febrero 1st, 2008 | 2 Comments | Posted in php

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:

pa\co@email.com
Tags: , ,