PHP: Validar email
24 de Agosto 2008 – 10:35 pmA la hora de desarrollar páginas webs, surge la necesidad de validar los campos de los formularios, para comprobar que los usuarios introduzcan datos de una manera correcta (que no quiere decir datos reales).
Uno de esos campos es el correo electrónico/email y la mejor forma de comprobar si un email es válido es usando expresiones regulares. Un ejemplo:
- <?php
- function validarCorreo($email)
- {
- return eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9]+[\.-])*[a-z0-9]+\.[a-z]{2,6}$’,$email);
- }
- ?>
En muchos de los ejemplos que hay por la red, comprueban que en el email no haya letras mayúsculas (en el nombre de usuario y del dominio). En este ejemplo no lo compruebo y por eso uso la función eregi en lugar de ereg. Las razones para no comprobar la existencia de letras mayúsculas es porque los proveedores de correo electrónico tampoco lo hacen: puedes probar a introducir tu nombre de usuario en mayúsculas o intercalando letras en minúsculas y mayúsculas y podrás tu correo perfectamente (la contraseña es otra historia).
En cuanto al dominio, aunque realmente los dominios no tienen letras mayúsculas, si pones en un navegador una direción completamente en mayúsculas, éste se encarga de ponerla en minúsculas. ¿Por qué no ofrecer la misma funcionalidad para así dar facilidades a nuestros usuarios?
Otra comprobación que se puede hacer, es comprobar que el dominio sea un dominio válido:
- <?php
- function validarCorreo($email)
- {
- if(eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9]+[\.-])*[a-z0-9]+\.[a-z]{2,6}$’,$email))
- return checkdnsrr(substr($email,strpos($email,‘@’)+1));
- else
- return false;
- }
- ?>
Y para comprobar que el dominio sea válido, usaremos la función checkdnsrr. ¡Ojo! Como bien pone la documentación de checkdnsrr, esta función no está implementada en sistemas Windows y recomienda usar la clase Net_DNS de PEAR.
Por supuesto, todas estas comprobaciones no impiden que nos puedan introducir un correo falso. Por ejemplo: xanfran@example.com.
Actualización 13-08-2008: he escrito una entrada intentando explicar el formato que puede tomar una dirección de correo electrónico
7 Comentarios en “PHP: Validar email”
nao sei como usar esta funcao dentro do meu arquivo fommail.php, tenho que colocar antes ou depois dos sinais tenho que abrir estes sinais novamente para a funcao ? nao quero criar um arquivo de funcoes, porque de momento so tenho esta e nao parece necessario criar um arquivo include … tem como incluir esta funcao dentro do formmail.php ? como faco para voltar a pagina web depois para uma pagina que faca referencia do erro cometido ou uma pagina de comprovacao de que tudo foi enviado corretamente?
muito obrigado
Por Luis Cezar el Sep 29, 2008
os sinais a que me refiro sao “?> e <? “
Por Luis Cezar el Sep 29, 2008
Hola @Luis Cezar, puedes poner la función en tu archivo y si, debe de ir dentro de
“< ?php ?>“.
Aunque lo mejor es que crees un archivo de funciones (aunque ahora solo tengas una), ya que así podrás rehusar dichas funciones en otros archivos únicamente incluyendo dicho archivo usando include o require.
Para mandar a un usuario a una página debes usar:
header(’Location: nombre_archivo‘);
cambiando nombre_archivo por el archivo (incluyendo la ruta en la que se encuentra) o la URL a la que quieres redireccionarlo.
Por xanfran el Sep 29, 2008
Xanfran, tu función está genial, pero admite que el email empiece o acabe por un - o un _ (guión alto o bajo).
¿Es posible que existan correos así?
Por Josemari el Dic 8, 2008
Hola @Josemari, Hotmail permite crear correos que empiecen por - y _
Inspirándome en tu pregunta acabo de escribir una entrada de como puede ser una dirección de correo electrónico
Un saludo
Por xanfran el Dic 8, 2008
como hacer parq que despues de presionar el boton me vuelva aregresar a mi pag html donde pongo los datos
Por Enrique el May 13, 2009
@Enrique, debes usar la función header
Por xanfran el May 14, 2009