2009-12-09 10 views
8

So che ci sono un sacco di domande su qui circa la convalida e-mail e RegEx specifiche di. Mi piacerebbe sapere quali sono le migliori pratiche sono per la convalida e-mail rispetto ad avere la [email protected] trick (details here). Il mio attuale RegExp per la convalida JavaScript è la seguente, ma non supporta l'extra + nel manico:Best practice per la convalida indirizzo di posta elettronica (compreso il + in indirizzi gmail)

/^([a-zA-Z0-9_.-])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

Ci sono altri servizi che supportano l'extra +? Devo consentire a un + l'indirizzo o dovrei alterare il RegEx per consentire solo per una e-mail con gmail.com o googlemail.com come il dominio? In tal caso, quale sarebbe la RegEx modificata?

UPDATE: Grazie a tutti per aver ricordato che + è valido per le specifiche. Non lo sapevo e ora lo faccio per il futuro. Per quelli di voi che dicono che è male persino usare una RegEx per validarla, la mia ragione è completamente basata su un design creativo che sto costruendo. Il design del nostro cliente inserisce un segno di spunta verde o una X rossa accanto all'input dell'indirizzo e-mail in sfocatura. Quell'icona indica se è un indirizzo email valido, quindi devo usare un po 'di JS per convalidarlo.

+2

E 'certo un trucco quando è parte dello standard di posta elettronica. – tloach

+8

Non utilizzare RegEx per la convalida della posta elettronica, oltre a rilevare errori di crittografia ovvi. Basta inviare all'utente un messaggio di posta elettronica con un link di "attivazione". Non ci sono regex di foolproog per la convalida della posta elettronica. Almeno nessuno che si adatti a un foglio di carta A4, anche se stampato in un font minuscolo, ma leggibile ;-) (http://www.regular-expressions.info/email.html) – Duroth

+0

@tloach Lo considero un trucco se non tutti i servizi di posta elettronica lo supportano in un modo che invia l'e-mail alla prima parte dell'handle prima di '+' a prescindere dalla parte dopo '+' - non ero nemmeno consapevole che facesse parte dello standard. –

risposta

11

+ è un valid character in un indirizzo di posta elettronica. Non importa se il dominio non è gmail.com o googlemail.com

I regex non sono in realtà un ottimo modo per convalidare le e-mail, ma se si desidera semplicemente modificare la propria espressione regolare per gestire il plus, cambiare al seguente:

/^([a-zA-Z0-9_.-\+])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 

come esempio di come questo regex non convalida contro la specifica: l'e-mail [email protected] è valida in base ad esso.

+0

Sarei curioso di sapere qual è il modo migliore per gestire la convalida degli indirizzi e-mail. – Zoidberg

+0

Suppongo che intenda che è meglio utilizzare una libreria collaudata e testata piuttosto che eseguire la propria espressione regolare. Un esempio Java di tale libreria è Apache Commons. –

+1

Vedi http://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation –

5

Se è necessario convalidare e-mail tramite regexp, quindi read the standard o almeno this article.

La norma suggerisce di utilizzare questo regexp:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 

Se questo non vi spaventa, si deve :)

+1

Dall'articolo che si collega a: "Non copiare ciecamente le espressioni regolari dalle biblioteche online o dai forum di discussione." Inoltre, questa espressione regolare _still_ non convalida completamente le specifiche. –

+0

@ Aaron Grazie, è molto spaventoso. Farò finta di non averlo mai visto prima - specialmente i personaggi codificati! –

3

vorrei tendono ad andare con qualcosa sulla falsariga di /[email protected] . + \ .. +/per verificare errori semplici. Quindi invierei un'email all'indirizzo per verificare che effettivamente esista, dal momento che la maggior parte degli errori di battitura produrrà comunque indirizzi e-mail sintatticamente validi.

2

Le specifiche consentono per alcuni indirizzi e-mail brutti davvero folli. Sono spesso molto infastidito dai siti Web che si lamentano anche di indirizzi di posta elettronica perfettamente normali e validi, quindi per favore, prova a non rifiutare indirizzi email validi. È meglio accettare alcuni indirizzi illegali piuttosto che rifiutare quelli legali.

Come altri hanno suggerito, mi piacerebbe andare con l'utilizzo di una semplice espressione regolare come /[email protected]+/ e poi l'invio di una e-mail di verifica. Se è abbastanza importante convalidare, è abbastanza importante verificare, perché un indirizzo email legale può ancora appartenere a una persona diversa dal tuo visitatore. O contenere un refuso non intenzionale ma fatale.

* Modifica: rimosso il punto dalla parte del dominio del regex, perché [email protected] è ancora un indirizzo email valido. Quindi anche la mia validazione super semplificata ha rifiutato gli indirizzi validi.C'è qualcosa di negativo nell'accettare semplicemente tutto ciò che contiene un @ con qualcosa davanti e dietro di esso?

+2

Non vi è alcun motivo per cui il governo di Tonga non possa aggiungere una voce 'MX' al ccTLD' to', rendendo un indirizzo come 'mcv @ to' un indirizzo di posta elettronica effettivo e funzionante. Hanno già un server web in esecuzione su 'http: // to' (per un servizio di accorciamento degli URI), quindi non è certamente irrealistico. –

Problemi correlati