Un regex no es realmente adecuado para determinar la validez de la sintaxis de la dirección de correo electrónico, y la opción FILTER_VALIDATE_EMAIL
para la función filter_var
tampoco es confiable. Uso el EmailAddressValidator Class para probar la sintaxis de la dirección de correo electrónico.
He reunido algunos ejemplos de resultados incorrectos devueltos por filter_var
(PHP Version 5.3.2-1ubuntu4.2). Probablemente hay más. Algunos son un poco extremos, pero vale la pena señalar:
RFC 1035 2.3.1. Sintaxis de nombre preferido
http://tools.ietf.org/search/rfc1035
Resumido como: un dominio consta de etiquetas separadas por separadores de puntos (no necesariamente cierto para dominios locales).
echo filter_var('[email protected]', FILTER_VALIDATE_EMAIL);
// [email protected]
RFC 1035 2.3.1. Sintaxis de nombre preferido
Las etiquetas deben seguir las reglas para los nombres de host ARPANET. Deben comenzar con una letra, y con una letra o un dígito, y tener como caracteres interiores solo letras, dígitos y guiones.
echo filter_var('[email protected]', FILTER_VALIDATE_EMAIL);
// [email protected]
RFC 2822 3.2.5. cadenas entre comillas
http://tools.ietf.org/html/rfc2822#section-3.2.5
Esto es válido (aunque es rechazada por muchos servidores de correo):
echo filter_var('name"quoted"[email protected]', FILTER_VALIDATE_EMAIL);
// FALSE
RFC 5321 4.5.3.1.1. Parte local
http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1
La longitud total máxima de un nombre de usuario u otra parte local es de 64 octetos.
prueba con 70 caracteres:
echo filter_var('Abcdefg[email protected]example.com', FILTER_VALIDATE_EMAIL);
// Abcdefg[email protected]example.com
RFC 5321 4.5.3.1.2. Dominio
http://tools.ietf.org/html/rfc5321#section-4.5.3.1.2
La longitud total máxima de un nombre de dominio o número es de 255 octetos.
de prueba con 260 caracteres:
echo filter_var('[email protected]jAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com', FILTER_VALIDATE_EMAIL);
// [email protected]jAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com
Para consultar todas Validate an E-Mail Address with PHP, the Right Way para más información.
Posible duplicado: http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses – Anax
Regex no validará un correo electrónico, solo validará que la entrada del usuario se parece a un correo electrónico. ([email protected] validará) Si realmente necesita validar, debe enviar un correo electrónico de validación. – marvin