2010-08-31 14 views
25

Para PHP cuál es la mejor validación de correo electrónico utilizando preg, NOereg porque es obsoleta /elimina.PHP validación de correo electrónico

I no que comprobar si existe el sitio web (que no es como la máxima seguridad).

He encontrado muchas formas con ereg pero (obviamente) no son una buena práctica.

Respuesta

78

le sugiero que utilice el filtro FILTER_VALIDATE_EMAIL:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    //valid 
} 

También puede utilizar its regular expression directamente:

"/^(?!(?:(?:\\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" 

Pero en ese caso, si se encuentra un error en la expresión regular, que' Tendré que actualizar tu programa en lugar de simplemente actualizar PHP.

+1

Tenga en cuenta que un correo electrónico también puede contener los siguientes caracteres: ''/* '. Entonces esta validación no lo hace DB seguro. –

+0

filter_var() es nuevo para mí. ¿FILTER_VALIDATE_EMAIL es bueno? – Marwelln

+0

+1 para la referencia del código fuente. great –

3

A menos que desee utilizar un very very long regular expressions, se encontrará con direcciones de correo electrónico válidas que no están cubiertas (piense en Unicode). También las direcciones de correo electrónico falsas pasarán como válidas, entonces, ¿qué sentido tiene validar si simplemente puede escribir [email protected] y salirse con la suya?

La mejor manera de validar direcciones de correo electrónico es enviar un correo electrónico de confirmación con un enlace para hacer clic. Esto solo funcionará si la dirección de correo electrónico es válida: fácil y no necesita usar expresiones regulares.

+0

simplemente como dije, no es como la seguridad máxima –

+4

Un Desarrollador razonable siempre comprobará la dirección determinada de una Dirección ANTES de intentar enviar un correo electrónico a la "cadena". Entonces esto no es un argumento Pero Doupble-opt-in debería hacerse de todos modos, que no era la pregunta. –

+0

@ Jan: Entonces, ¿qué sucede si mi correo electrónico es àèìò@@midominio.com y su control preventivo me impide registrarme en su sitio? Simplemente envíe un correo electrónico de confirmación y ya está configurado, no es necesario verificar la validez antes y arriesgarse a bloquear direcciones de correo electrónico válidas. – nico

0
function check_email($check) { 
$expression = "/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/"; 
if (preg_match($expression, $check)) { 
    return true; 
} else { 
    return false; 
} 
} 

llaman en si() estado de la siguiente ejemplo:

if(!check_email($_REQUEST['ContactEmail'])){ 
    $register_error ="Enter the correct email address!<br />"; 
    $reg_error=1; 
} 
+0

¿alguien me puede decir cuál es el problema en este código bcz una persona abajo de la votación. Está funcionando bien. –

+0

No fui yo quien votó pero ... no es correcto filtrar correctamente las direcciones de correo electrónico, la expresión correcta y completa se puede encontrar aquí: http://www.ex-parrot.com/~ pdw/Mail-RFC822-Address.html En segundo lugar, usar el PHP incorporado en FILTER_VALIDATE_EMAIL sería la forma correcta/mejor de filtrar una dirección de correo electrónico – twigg

Cuestiones relacionadas