regex (direcciónes de correo electrónico)

facebook-svg gplus-svg twitter-svg

Validar un e-mail puede ser muy complicado y muy fácil a la vez.
Para entender por que puede ser tan difícil, veamos algunos ejemplos de direcciones de email válidas .

  • niceandsimple@example.com
  • very.common@example.com
  • a.little.lengthy.but.fine@dept.example.com
  • disposable.style.email.with+symbol@example.com
  • other.email-with-dash@example.com
  • user@[IPv6:2001:db8:1ff::a0b:dbd0]
  • "much.more unusual"@example.com
  • "very.unusual.@.unusual.com"@example.com
  • "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
  • postbox@com 
  • admin@mailserver1 
  • !#$%&'*+-/=?^_`{}|~@example.org
  • "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
  • " "@example.org 
  • üñîçø∂é@example.com 

Lista de direcciones de correo electrónico válidas publicada por Wikipedia.

Entonces, ¿cómo validar los emails?

El PHP cuenta con varios filtros de validación, entre los cuales el FILTER_VALIDATE_EMAIL nos viene de maravilla.


		if(filter_var( $_POST["correo"] , FILTER_VALIDATE_EMAIL)){
		$correo = mysqli_real_escape_string( $conexion, $_POST["correo"]);
		}else{
		$errors["correo"] = "Tiene que proporcionar un email valido";
		}

El HTML5 nos lo pone todavía más fácil, o casi.

Si el usuario navega en ingles, los mensajes recibidos vendrán en ingles, y si navega en castellano, es posible que no nos guste el texto del mensaje que viene de fabrica. La buena noticia es que es posible personalizar estos mensajes con un poco de magia y JavaScript. Los eventos oninvalid y oninput pueden ser utilizados inline, encastrados el el código HTML, o en un <script> con este propósito.


Por lástima IE9, sus versiones anteriores y Safari no reconocen el input type="email" y lo tratan como a un input type="text".

AVISO IMPORTANTE:

JavaScript puede ser deshabilitado fácilmente, por lo cual no hay que confiar demasiado en la validación de direcciones de email ( o de lo que sea ) con expresiones regulares. Validamos mediante JavaScript para que todo vaya muy rápido y el usuario tenga una experiencia agradable.
Al insertar el contenido de los input en una base de datos, tendremos que volver a validar el formulario mediante un script del lado del servidor (server-side scripting) como ASP, ColdFusion, PHP, Ruby on Rails etc...

A continuación una colección de expresiones regulares (regex) útiles para validar direcciónes de correo electrónico.

RegEx minimalista

^[^@]+@[^@]+\.[a-zA-Z]{2,}$

Ejemplo:
alguien@algunlugar.es

RegEx email según w3.org

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$

Ejemplo:
foo-bar.baz@example.com

Una implementación del Estandard Official: RFC 5322:
( valida en el 99.99% de los emails existentes )

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Ejemplo:
alguien@algunlugar.es