Una regex non è realmente adatta per determinare la validità della sintassi dell'indirizzo di posta elettronica e l'opzione FILTER_VALIDATE_EMAIL
per la funzione filter_var
è piuttosto inaffidabile. Io uso il EmailAddressValidator Class per testare la sintassi degli indirizzi e-mail.
Ho messo insieme alcuni esempi di risultati errati restituiti da filter_var
(versione PHP 5.3.2-1ubuntu4.2). Ce ne sono probabilmente di più Alcuni sono certamente un po 'estremi, ma ancora degno di nota:
RFC 1035 2.3.1. Sintassi nome preferito
http://tools.ietf.org/search/rfc1035
Riepilogato come: un dominio è costituito da etichette separate da punti separatori (non necessariamente vero per i domini locali).
echo filter_var('[email protected]', FILTER_VALIDATE_EMAIL);
// [email protected]
RFC 1035 2.3.1. Sintassi nome preferito
Le etichette devono seguire le regole per i nomi host ARPANET. Devono iniziare con una lettera, una lettera o una cifra e avere come caratteri interni solo lettere, cifre e trattini.
echo filter_var('[email protected]', FILTER_VALIDATE_EMAIL);
// [email protected]
RFC 2822 3.2.5. stringhe tra virgolette
http://tools.ietf.org/html/rfc2822#section-3.2.5
Questo è valido (anche se è respinta da molti server di posta):
echo filter_var('name"quoted"[email protected]', FILTER_VALIDATE_EMAIL);
// FALSE
RFC 5321 4.5.3.1.1. Parte locale
http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1
La lunghezza totale massima di un nome utente o altra parte locale è 64 ottetti.
di prova con 70 caratteri:
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 lunghezza massima totale di un nome di dominio o di un numero è 255 ottetti.
di prova con 260 caratteri:
echo filter_var('[email protected]jAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com', FILTER_VALIDATE_EMAIL);
// [email protected]jAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com
Date un'occhiata al Validate an E-Mail Address with PHP, the Right Way per ulteriori informazioni.
Eventuali duplicati: http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses – Anax
Regex non convaliderà una e-mail, si convaliderà solo che l'input dell'utente assomiglia a un'e-mail. ([email protected] convaliderà) Se è davvero necessario convalidare, è necessario inviare un messaggio di posta elettronica di convalida. – marvin