Saltar al contenido

5 formas de validar emails en PHP

5 formas de validar emails en PHP

Una de las labores más comunes en nuestra vida como desarrolladores es validar una dirección de email. Existen múltiples formas de realizar ésta tarea desde expresiones regulares a funciones propias de PHP. Sopesaremos 5 formas diferentes de hacer esto.

1. Verificar la presencia de ciertos caracteres.

Lo he visto en muchas ocasiones aunque es de lejos la forma menos eficaz: verificar que la dirección contiene los caracteres «@» y «.». Es una forma sencilla y rápida de codificar y no requiere muchos recursos de la maquina al validar las direcciones. Sin embargo, hay muchísimos errores en las direcciones email que no serán detectadas por este método.

Puede complicarse más o añadirse más reglas como verificar la longitud de la cadena antes de la @ y después de la misma, pero sigue sufriendo de los mismos problemas y finalmente no es algo que recomiende en ningún caso.

2. Expresiones regulares

Una de las formas más comunes si buscas soluciones a este problema en internet es la de realizar una expresión regular que compruebe el formato de la misma. Podemos encontrar muchas expresiones para utilizar en este caso. Por ejemplo usando preg_match:

Las hay más complejas o menos pero hay que tener mucho cuidado pues puede darse el caso de que si no se construye correctamente direcciones válidas no sean verificadas correctamente. Además son difíciles de interpretar si no tenemos un buen conocimiento de expresiones regulares.

3. filter_var

Una de las formas más sencillas es usar la función filter_var para filtrar variables con filtros predefinidos entre el que encontramos uno para emails.

Es un método sencillo y cómodo. Por lo fácil que se entiende es uno de mis métodos preferidos.

Todos los métodos hasta ahora comprueban que el formato del email sea correcto pero no van más allá. Cualquier email inventado que siga el formato de los emails reales pasará estas verificaciones.

4. Comprobar el registro MX

Esté método añade un paso más y puede combinarse con cualquiera de los métodos anteriores. Todas las direcciones válidas de email deben tener un registro MX en sus DNS o no funcionarían. Por tanto comprobarlo nos permite asegurar que al menos el dominio introducido existe y puede usarse para correo electrónico. Para ello podemos usar checkdnsrr

Es un gran método y bastante sencillo. Puede no ser recomendable si tenemos que comprobar grandes volúmenes de emails o donde se necesite que el consumo de recursos y tiempo sean muy bajos.

5. Verificación por email

Todos los métodos anteriores tienen un gran problema: no verifican que el buzón exista. Puede que el formato sea correcto, el dominio exista y toda la configuración de las DNS sea correcta pero aún así puede que el nombre suministrado no exista.

El método definitivo es enviar un email a dicha dirección con un enlace o código para su verificación. Si el usuario verifica su email tenemos confirmación no solo de que existe si no de que pertenece al usuario que lo ha introducido.

¿Por qué no usarlo siempre? Es un método más complejo de implementar ya que necesitas de una base de datos y de un sistema de verificación. Sin embargo, su principal problema es que requiere de la acción del usuario por lo que por fácil que sea, puede suponer una molestia. Además retrasa la verificación hasta que el usuario recibe el correo y la verifica por lo que no es apto en procesos de compra por ejemplo.

Conclusión

Salvo que nuestro sistema necesite de emails fuertemente verificados, el método 4: comprobar el registro MX (combinado con el uso de filter_var) será nuestra mejor opción ya que nos ofrece una verificación bastante fuerte usando un código sencillo de entender y mantener y no ofrece ninguna molestia al usuario.

2 comentarios en «5 formas de validar emails en PHP»

  1. Que opinan de esta pagina, que verifica que realmente exista el nombre de usuarios y dominio y que pueda recibir mensajes, asi como reconocer los tramp spam

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.