![]()
Questa non valida le email correttamente?
Codice PHP:$r1 = "([a-z0-9]+[";
$r2 = "\-]?){1,3}([a-z0-9])*";
$pattern = "/(?i)^{$r1}\._{$r2}\@{$r1}\.{$r2}\.[a-z]{2,6}$/"
preg_match($pattern, $email)
![]()
Questa non valida le email correttamente?
Codice PHP:$r1 = "([a-z0-9]+[";
$r2 = "\-]?){1,3}([a-z0-9])*";
$pattern = "/(?i)^{$r1}\._{$r2}\@{$r1}\.{$r2}\.[a-z]{2,6}$/"
preg_match($pattern, $email)
Ciao!
No, esempi:Originariamente inviato da fmortara
![]()
Questa non valida le email correttamente?
Codice PHP:$r1 = "([a-z0-9]+[";
$r2 = "\-]?){1,3}([a-z0-9])*";
$pattern = "/(?i)^{$r1}\._{$r2}\@{$r1}\.{$r2}\.[a-z]{2,6}$/"
preg_match($pattern, $email)
e chissa' quanti altricodice:foobar.@mail.com -> email invalida ma passa il check foobar@mail-.com -> email invalida ma passa il check fo__bar@mail.com -> email valida ma non passa il check
Giusto, ma allora il controllo che fa la funzione filter_var è più preciso? Non commette errori?
in rete ho trovato questo, una discussione circa le modalità "definitive" per validare una mail.
http://www.linuxjournal.com/article/9585?page=0,3
discussione completa: http://www.linuxjournal.com/article/9585
Ma fanno numerose preg_match, impensabile in un sito in produzione se deve essere chiamata molte volte.
Altrimenti cosa si deve fare?
Ciao!
L'unico metodo sicuro per validare un'email, e' il piu' semplice e ovvio: provare a mandare un messaggio e vedere se arriva
In fondo e' quello che fanno praticamente tutti i siti che chiedono una registrazione che viene confermata da un link inviato per email.
vabbè chiaro, io intendo dire se l'indirizzo è formalmente valido.
Ciao!
Il fatto e' che il formato valido di un'email in generale e' molto complicato, quindi di conseguenza e' complicato anche il controllo. Se si vuole semplificare, si finisce per forza per lasciare dei buchi.
Questo passa la validazione:
Codice PHP:if(!filter_var('sdfg@fsdf', FILTER_VALIDATE_EMAIL)) {
return false;
}
Ciao!
guardate che filter_var .. FILTER_VALIDATE_EMAIL non fa altro che usare una regex, nient'altro di magico![]()
E sappiamo tutti che non esiste la regex ideale per le mail, quindi anche filter_var e' da usare consapevolmente.codice:$ grep -A4 php_filter_validate_email ext/filter/logical_filters.c void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ { /* From http://cvs.php.net/co.php/pear/HTML_...mail.php?r=1.4 */ const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z\\-]))?)+[A-Za-z\\-]*))$/D";