La forma más fácil y segura de verificar si una dirección de correo electrónico está bien formada es usar la filter_var()
función:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
Además, puede verificar si el dominio define un MX
registro:
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
Pero esto todavía no garantiza que exista el correo. La única forma de averiguarlo es enviando un correo de confirmación.
Ahora que tiene una respuesta fácil, no dude en seguir leyendo sobre la validación de la dirección de correo electrónico si le interesa aprender o simplemente usar la respuesta rápida y seguir adelante. Sin resentimientos.
Intentar validar una dirección de correo electrónico utilizando una expresión regular es una tarea "imposible". Me atrevería a decir que esa expresión regular que has hecho es inútil. Hay tres rfc con respecto a las direcciones de correo electrónico y escribir una expresión regular para atrapar direcciones de correo electrónico incorrectas y al mismo tiempo no tener falsos positivos es algo que ningún mortal puede hacer. Consulte esta lista para ver las pruebas (fallidas y exitosas) de la expresión regular utilizada por PHPfilter_var()
función .
Incluso las funciones PHP integradas, los clientes o servidores de correo electrónico no funcionan correctamente. Aún en la mayoría de los casosfilter_var
es la mejor opción.
Si desea saber qué patrón de expresiones regulares utiliza PHP (actualmente) para validar las direcciones de correo electrónico, consulte la fuente de PHP .
Si desea obtener más información sobre las direcciones de correo electrónico, le sugiero que comience a leer las especificaciones, pero debo advertirle que no es una lectura fácil de ninguna manera:
Tenga en cuenta que filter_var()
como ya se indicó, solo está disponible a partir de PHP 5.2. En caso de que desee que funcione con versiones anteriores de PHP, puede usar la expresión regular utilizada en PHP:
<?php
$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PD Una nota sobre el patrón regex utilizado anteriormente (de la fuente PHP). Parece que hay algunos derechos de autor sobre él de Michael Rushton . Como se indicó: "Siéntase libre de usar y redistribuir este código. Pero conserve este aviso de copyright".
validateEmail
sería correcto, así como pasar$email
, no$EMAIL
.