Come convalidare un indirizzo e-mail in JavaScript


4380

Esiste un'espressione regolare per convalidare un indirizzo e-mail in JavaScript?



60
per favore, capisci bene, troppi siti web non gradiscono il mio indirizzo e-mail "firstName@secondName.name", non tutti i domini di primo livello finiscono con 2 o 3 lettere.
Ian Ringrose,

41
Qualsiasi supporto per l'uso dei controlli regex per le e-mail contro il 100%. Sono stanco di sapere che il mio indirizzo e-mail "foo+bar@gmail.com" non è valido. L'opzione migliore è chiedere all'utente di digitare la propria e-mail due volte e se DEVI utilizzare un correttore regex, dire all'utente che il loro indirizzo e-mail non sembra essere valido e chiedere se sono sicuri di averlo digitato destra. Persino fino a sottolineare COSA non è stato verificato nel controllo regexp, ma NON impedire loro di inviare il modulo.
Soundfx4,

17
@ Soundfx4: questa dovrebbe essere LA risposta e accettata come tale. Testare la correttezza di un indirizzo è una cosa stupida da fare : il modo migliore per frustrare i clienti. Chiedo che l'indirizzo venga digitato due volte e suggerisco che ci sono alcuni possibili problemi (mancanti @, ;comecc.) E consento all'utente di correggerli se lo desiderano (e di accettare qualunque cosa mi invii)
WoJ

4
Sono totalmente d'accordo con la risposta data da WoJ. Il formato di un indirizzo e-mail valido è troppo complesso per essere verificato con una semplice espressione regolare. L'unico modo per essere certi che l'indirizzo sia valido è provarlo.
Nicole,

Risposte:


4949

L'uso delle espressioni regolari è probabilmente il modo migliore. Puoi vedere un sacco di test qui (presi dal cromo )

function validateEmail(email) {
    const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(String(email).toLowerCase());
}

Ecco l'esempio dell'espressione regolare che accetta unicode:

const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

Ma tieni presente che non si dovrebbe fare affidamento solo sulla convalida JavaScript. JavaScript può essere facilmente disabilitato. Questo dovrebbe essere validato anche sul lato server.

Ecco un esempio di quanto sopra in azione:

function validateEmail(email) {
  const re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(email);
}

function validate() {
  const $result = $("#result");
  const email = $("#email").val();
  $result.text("");

  if (validateEmail(email)) {
    $result.text(email + " is valid :)");
    $result.css("color", "green");
  } else {
    $result.text(email + " is not valid :(");
    $result.css("color", "red");
  }
  return false;
}

$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <p>Enter an email address:</p>
  <input id='email'>
  <button type='submit' id='validate'>Validate!</button>
</form>

<h2 id='result'></h2>


576
Questo regex elimina e-mail valide e in uso. Non usare. Google per "RFC822" o "RFC2822" per ottenere una regex corretta.
Randal Schwartz,

42
Questo non accetta nemmeno gli esempi in RFC 822. Alcuni casi semplici non corrispondono a a \ @ b @ c.com, a(b)@c.com. Vedi RFC per di più. Ecco una regex che non rifiuta alcun indirizzo valido [^ @] + @ [^ @] + \. [^ @] + E protegge da errori comuni.
Vroo,

126
@GoodPerson Ho appena provato a inviare un'e-mail a n @ ai per dirgli che hanno un indirizzo e-mail interessante. Ma ahimè, Gmail non me lo ha permesso. Sospetto che chiunque abbia maggiori problemi di comunicazione con gli altri via e-mail oltre alla semplice convalida javascript del mio sito! Ma grazie per essere all'altezza della sfida.
Ben Roberts,

26
Questa è una soluzione che sembra buona con la maggior parte dei madrelingua inglesi, ma fallisce il test in Turchia (vedi Joel Spolsky). È consentita la maggior parte delle lettere unicode e, ad esempio, in Argentina, indirizzi come "ñoñó1234@server.com" sono perfettamente normali. joelonsoftware.com/articles/Unicode.html
oligofren

139
Non è possibile convalidare gli indirizzi e-mail, punto. L'unico che può convalidare un indirizzo e-mail è il fornitore dell'indirizzo e-mail. Ad esempio, questa risposta dice questi indirizzi e-mail: %2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.comsono tutti validi, ma Gmail non consentirà mai nessuno di questi indirizzi e-mail. Dovresti farlo accettando l'indirizzo e-mail e inviando un messaggio e-mail a quell'indirizzo e-mail, con un codice / link che l'utente deve visitare per confermare la validità.
Kevin Fegan,

830

Ho leggermente modificato la risposta di Jaymon per le persone che desiderano una convalida davvero semplice sotto forma di:

anystring@anystring.anystring

L'espressione regolare:

/\S+@\S+\.\S+/

Esempio di funzione JavaScript:

function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
console.log(validateEmail('anystring@anystring.anystring'));


69
Puoi implementare qualcosa di 20 volte più lungo che potrebbe causare problemi a pochi utenti e potrebbe non essere valido in futuro, oppure puoi prendere la versione di ImmortalFirefly per assicurarti che almeno si sforzino di farlo sembrare reale. A seconda dell'applicazione, potrebbe essere più probabile imbattersi in qualcuno che si arrabbierà perché non accetti la loro e-mail non convenzionale, piuttosto che qualcuno che causa problemi inserendo indirizzi e-mail che non esistono realmente (cosa che possono fare comunque inserendo un indirizzo e-mail RFC2822 valido al 100% ma utilizzando un nome utente o dominio non registrato). Upvoted!
user83358

82
@ImmortalFirefly, la regex che hai fornito corrisponderà effettivamente name@again@example.com. Prova a incollare la linea in una console JavaScript. Credo che la tua intenzione fosse quella di abbinare solo l'intero testo, il che richiederebbe l'inizio del testo "^" e la fine del testo "$" operatori. Quello che sto usando è/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')
OregonTrail

8
Sulla base di questa convalida questa email è valida: controlla @ this..com
Ehsan

4
Hm. Wikipedia afferma che "very.unusual.@.unusual.com"@example.comè un indirizzo email valido. /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"very.unusual.@.unusual.com"@example.com') // false. Ops.
Pezzi di pancetta

3
Anche questo non lo consente @@@.@? : D
hfossli,

763

Solo per completezza, qui hai un'altra regex conforme a RFC 2822

Lo standard ufficiale è noto come RFC 2822 . Descrive la sintassi a cui devono aderire indirizzi e-mail validi. Puoi ( ma non dovresti - continua a leggere ) implementarlo con questa espressione regolare:

(?:[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])+)\])

(...) Otteniamo un'implementazione più pratica di RFC 2822 se omettiamo la sintassi usando virgolette doppie e parentesi quadre. Corrisponderà ancora al 99,99% di tutti gli indirizzi e-mail attualmente in uso.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

Un'ulteriore modifica che potresti apportare è consentire qualsiasi dominio di primo livello con codice paese di due lettere e solo domini di primo livello generici specifici. Questo regex filtra indirizzi e-mail fittizi comeasdf@adsf.adsf . Dovrai aggiornarlo man mano che vengono aggiunti nuovi domini di primo livello .

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

Quindi, anche quando si seguono gli standard ufficiali, ci sono ancora dei compromessi da fare. Non copiare alla cieca espressioni regolari da biblioteche online o forum di discussione. Testali sempre sui tuoi dati e con le tue applicazioni.

Enfasi mia


84
NB: "In uso attuale oggi " potrebbe essere valido al momento della scrittura del codice, di nuovo in 200x. Il codice sarà probabilmente rimarrà in uso al di là di quel determinato anno. (Se avessi un centesimo per ogni "meh, nessuno userebbe mai un TLD 4 +-letter tranne quelli specifici" che dovevo sistemare, avrei potuto
aggirare il

7
Per l'implementazione pratica di RFC 2822, il finale dovrebbe essere leggermente modificato per evitare estensioni di dominio a carattere singolo. / [a-z0-9! # $% & '* + \ / =? ^ _ {|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_{|} ~ -] +) * @ (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])? \.) + [a-z0-9] [a-z0-9 -] * [a-z0-9] /
sarà Farrell il

5
Inoltre, la prima parte dovrebbe essere (?: [Az con la A maiuscola per evitare falsi negativi quando un utente capitalizza il proprio indirizzo e-mail.
Don Rolling

9
@DonRolling Non farlo. Ciò non significa solo "dalla A alla Z, dalla a alla z", ma significa anche "[\] ^ _` "perché si trovano tra " Z "e" a ". Utilizzare \w, o meglio, solo minuscole l'indirizzo e-mail prima di fare qualsiasi cosa con esso perché questa è comunque la convenzione.
Kirb,

5
"Dovrai aggiornarlo man mano che vengono aggiunti nuovi domini di primo livello." Bene, per ora, ci sono oltre 1500 TLD riconosciuti.
Nathan Osman,

377

Wow, ci sono molte complessità qui. Se tutto ciò che vuoi fare è solo catturare gli errori di sintassi più ovvi, farei qualcosa del genere:

^\S+@\S+$

Di solito rileva gli errori più evidenti che l'utente commette e garantisce che il modulo sia per lo più corretto, che è la convalida JavaScript.


70
+1 come l'invio di e-mail e vedere cosa succede è l'unico vero modo sicuro per convalidare un indirizzo e-mail, non c'è bisogno di fare altro che una semplice corrispondenza regex.
kommradHomer,

20
Puoi ancora mantenerlo semplice, ma fai un po 'di più per assicurarti che abbia un "." da qualche parte dopo la @ seguita solo da numeri o cifre, quindi cose come me @ qui, io @ qui @ e me @ herecom non sono valide ... ^ \ S + @ \ S + [\.] [0-9a-z ] + $
Tim Franklin

14
Penso che gli indirizzi e-mail possano contenere spazi. Probabilmente è meglio usarlo.+@.+
Sam

11
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð") true
Gtournie,

111
@gtournie A nessuno importa. Nessuno sta per entrare in quel campo in una e-mail per caso , e questo è tutto front-end di convalida è per: per impedire alla gente di entrare accidentalmente il po 'sbagliato di informazioni, come il loro nome, in un campo di posta elettronica.
meagar

330

C'è qualcosa che devi capire nel momento in cui decidi di utilizzare un'espressione regolare per convalidare le e-mail: probabilmente non è una buona idea . Una volta che hai fatto i conti con questo, ci sono molte implementazioni là fuori che possono portarti a metà strada, questo articolo li riassume bene.

In breve, tuttavia, l'unico modo per essere assolutamente, positivamente sicuri che ciò che l'utente ha inserito è in realtà un'e-mail è effettivamente inviare un'e-mail e vedere cosa succede. A parte questo, è solo una supposizione.


112
-1 perché dovrei passare il tempo a convalidare un indirizzo e-mail che non passa nemmeno il controllo regex?
kommradHomer,

63
@kommradHomer - un indirizzo "regex invalid" è quasi sempre valido, poiché qualsiasi regex che usi per convalidare un indirizzo e-mail è quasi certamente errato e escluderà indirizzi e-mail validi. Un indirizzo email è name_part@domain_partpraticamente qualsiasi cosa, incluso un @, è valido in name_part; L'indirizzo foo@bar@machine.subdomain.example.museumè legale, anche se deve essere evitato come foo\@bar@machine..... Una volta che l'e-mail raggiunge il dominio, ad esempio "esempio.com", tale dominio può instradare la posta "localmente", in modo che possano esistere nomi utente e nomi host "strani".
Stephen P

6
Il secondo regex nella risposta di voyager in stackoverflow.com/a/1373724/69697 è pratico per l'uso e non dovrebbe avere quasi falsi negativi. Sono d'accordo con @kommradHomer qui - perché inviare un'e-mail se non è necessario? Riesco a capire l'antipatia riflessiva per regex incomprensibili e desidero mantenere il codice semplice, ma si tratta di un paio di righe di codice che possono salvare un sacco di problemi al tuo server eliminando immediatamente gli elementi che non sono assolutamente validi. Un regex di per sé non è utile, ma serve da buon complemento alla validazione lato server.
Ben Regenspan,

6
@dmur Ammetto che "quasi sempre valido" probabilmente lo sta sovrastimando, ma i miei indirizzi email (perfettamente validi e funzionanti) sono stati rifiutati troppo spesso dai siti Web, solo perché ho un .usdominio o perché ho usato un +a sinistra di i @- molti posti hanno corretto questi errori significativi, ma la parte locale (a sinistra di @) può essere qualsiasi cosa il proprietario del dominio desideri. -> "foo@bar.com"@example.com <- è un indirizzo email valido.
Stephen P,

8
@kommradHomer "Un indirizzo regex-invalid è% 100 un indirizzo non valido." Mi dispiace ... mi scusi? Sai quante volte mi è stato detto che foo+bar@gmail.com NON è un'e-mail valida quando in realtà È PERFETTAMENTE VALIDO ?! La tua logica è ESTREMAMENTE imperfetta. Ho inviato moduli con e-mail come tali: thisisafakeemailbutitwillpassyourstupidregexcheck@regexchecksareretarded.com E indovinate un po '? CHE PASSA IL REGEX controlla ... ma NON è una email valida (anche se tecnicamente lo è, ma ti prometto che non esiste ... eppure si gratta il mento ). Come molti hanno già detto, è una
cattiva idea

211

HTML5 stesso ha la convalida dell'email. Se il tuo browser supporta HTML5, puoi utilizzare il seguente codice.

<form><input type="email" placeholder="me@example.com" required>
    <input type="submit">
</form>

jsFiddleCollegamento

Dalle specifiche HTML5 :

Un indirizzo e-mail valido è una stringa che corrisponde alla emailproduzione del seguente ABNF, il set di caratteri per il quale è Unicode.

email   = 1*( atext / "." ) "@" label *( "." label )
label   = let-dig [ [ ldh-str ] let-dig ]  ; limited to a length of 63 characters by RFC 1034 section 3.5
atext   = < as defined in RFC 5322 section 3.2.3 >
let-dig = < as defined in RFC 1034 section 3.5 >
ldh-str = < as defined in RFC 1034 section 3.5 >

Questo requisito è una violazione intenzionale di RFC 5322, che definisce una sintassi per gli indirizzi di posta elettronica che è contemporaneamente troppo rigida (prima del carattere "@"), troppo vaga (dopo il carattere "@") e troppo lassista (che consente commenti , i caratteri di spazi bianchi e le stringhe citate in modi non familiari alla maggior parte degli utenti) per essere utili qui.

La seguente espressione regolare compatibile con JavaScript e Perl è un'implementazione della definizione precedente.

/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

29
questo va bene, ma il problema è che deve essere all'interno di un formtag e inviato da un submitinput, che non tutti hanno il lusso di fare. Inoltre, non puoi davvero dare uno stile al messaggio di errore.
Jason,

3
Di seguito ho aggiunto una risposta che ti libera dal modulo e invia. Ma sì, i browser di solito applicano anche solo un controllo di plausibilità e non una convalida RFC 822 completa.
Boldewyn,

8
@ br1: non è valido solo perché non esiste un dominio di livello superiore "a". perché la tua intranet ha una risoluzione su un po 'di IP?
pecora volante

7
Il tipo di campo email html5 accetta email come user @ email
Puce

1
Nota @ Commento di Puce: l'input di e-mail HTML 5 accetta user@emailmentre, ad esempio, PHP filter_varno. Ciò potrebbe causare problemi.
texelate

136

Ho trovato che questa è la soluzione migliore:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

Permette i seguenti formati:

1. prettyandsimple@example.com
2. very.common@example.com
3. disposable.style.email.with+symbol@example.com
4. other.email-with-dash@example.com
9. #!$%&'*+-/=?^_`{}|~@example.org
6. "() []:,; @ \\\"! # $% & '* + - / =? ^ _ `{} | ~ .A "@ example.org
7. "" @ example.org (spazio tra le virgolette)
8. üñîçøðé@example.com (caratteri Unicode nella parte locale)
9. üñîçøðé@üñîçøðé.com (caratteri Unicode nella parte dominio)
10. Pelé@example.com (latino)
11. δοκιμή@παράδειγμα.δοκιμή (greco)
12. 我 買 @ 屋企. 香港 (cinese)
13. 甲 斐 @ 黒 川. 日本 (giapponese)
14. чебурашка@ящик-с-апельсинами.рф (cirillico)

È chiaramente versatile e consente ai personaggi internazionali di fondamentale importanza, pur applicando il formato base any@anything.anything. Bloccherà gli spazi tecnicamente consentiti da RFC, ma sono così rari che sono felice di farlo.


9
Questo è esattamente quello che sto facendo. Tutte queste risposte "complicate" producono problemi: o non consentono IDN con codice di errore o utilizzano un set fisso di TLD o limitano inutilmente l'utente a non utilizzare caratteri come [@ çµ.ö nel prefisso e-mail (prima di @) o nome di dominio. JavaScript in frontend (non per uso backend della causa) non è sufficiente per la convalida per motivi di sicurezza. Quindi perché non solo aiutare l'utente a prevenire errori di battitura di base. I refusi di base sono: dimenticare TLD o prefisso utente (prima di @) o dominio-parte o mistype @come .(o viceversa). Di causa dobbiamo essere molto più restrittivi sul lato server.
Hafenkranich,

Per alcune strane ragioni username@domain.comnon funziona con questo modello
einstein il

2
Secondo la tua regex è valido "_.............. kamal@gmail.com", cosa che non dovrebbe essere!
Kamal Nayan,

1
Ecco la RegEx dichiarata con esempi, se vuoi armeggiare con questa soluzione: regex101.com/r/AzzGQU/2
ryanm

7
Questa regex è corretta. Se qualcuno sta inserendo la sua e-mail come a@b@c@d.x.y.@.zallora forse merita di passare dei brutti momenti? : D
corysimmons,

94

Nei browser moderni puoi basarti sulla risposta di @ Sushil con JavaScript puro e il DOM :

function validateEmail(value) {
  var input = document.createElement('input');

  input.type = 'email';
  input.required = true;
  input.value = value;

  return typeof input.checkValidity === 'function' ? input.checkValidity() : /\S+@\S+\.\S+/.test(value);
}

Ho messo insieme un esempio nel violino http://jsfiddle.net/boldewyn/2b6d5/ . In combinazione con il rilevamento delle funzionalità e la convalida delle ossa nude dalla risposta di Squirtle , ti libera dal massacro delle espressioni regolari e non si blocca sui vecchi browser.


4
Questa è un'idea intelligente per puntare sul problema, ma non funziona perché anche i browser hanno una convalida scadente. Ad esempio, .@aconvalida come truenelle versioni correnti di Chrome, Firefox e Safari.
Hank

13
@HenryJackson Sfortunatamente, in questo caso sì. Questo perché secondo la RFC si tratta di un indirizzo e-mail valido (pensa alle intranet). I browser sarebbero grigliati, se convalidassero troppo restrittivamente e producessero falsi negativi.
Boldewyn,

3
Aggiornato per contenere il rilevamento delle funzionalità e il degrado gradevole, ora non si interrompe sui nuovi browser ma utilizza qualsiasi regex che ti piace.
Ronny,

Bella soluzione. Purtroppo questo è solo per HTML5 +.
Edward Olamisan,

3
Questa è di gran lunga la migliore soluzione alla domanda originale. Sì, utilizza HTML5, ma la maggior parte delle applicazioni che richiedono questo livello di accuratezza farà sicuramente già affidamento su HTML5 in qualche altro modo, quindi punto controverso. È impossibile per noi determinare se l'e-mail di qualcuno è valida senza farle comunque verificare, quindi non dovremmo davvero investire così tanto tempo o sforzi nella convalida. Un rapido controllo per qualsiasi sintassi evidente o tentativo di cattiveria è tutto lo sforzo che dovremmo spendere.
Woody Payne,

69

Questa è la versione RFC822 corretta.

function checkEmail(emailAddress) {
  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string

  var reValidEmail = new RegExp(sValidEmail);

  return reValidEmail.test(emailAddress);
}

Gli indirizzi IDN non sono convalidati (info@üpöü.com)
DAH,

66

JavaScript può corrispondere a un'espressione regolare:

emailAddress.match( / some_regex /);

Ecco un'espressione regolare RFC22 per le e-mail:

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

1
@Kato: utilizza alcune estensioni incompatibili, tra cui (?>per interrompere il backtracking ed (?<angle><)…(?(angle)>)evitare di fornire un lungo |.
Ry-

60

Tutti gli indirizzi e-mail contengono un simbolo 'at' (cioè @). Prova quella condizione necessaria:

email.indexOf("@") > 0

Non preoccuparti di nulla di più complicato. Anche se potessi determinare perfettamente se un'e-mail è sintatticamente valida per RFC, ciò non ti direbbe se appartiene alla persona che l'ha fornita. Questo è ciò che conta davvero.

Per verificarlo, invia un messaggio di convalida.


3
cosa succede se ci sarà più di un simbolo "@"? altri simboli riservati? Questa convalida non può essere attendibile ...
Eatmypants,

56

La corretta convalida dell'indirizzo e-mail in conformità con le RFC non è qualcosa che può essere ottenuto con un'espressione regolare a una riga. Un articolo con la migliore soluzione che ho trovato in PHP è Cos'è un indirizzo email valido? . Ovviamente, è stato portato su Java. Penso che la funzione sia troppo complessa per essere trasferita e utilizzata in JavaScript. Porta JavaScript / node.js: https://www.npmjs.com/package/email-addresses .

Una buona pratica è convalidare i dati sul client, ma ricontrollare la convalida sul server. Con questo in mente, puoi semplicemente verificare se una stringa assomiglia a un indirizzo e-mail valido sul client ed eseguire il controllo rigoroso sul server.

Ecco la funzione JavaScript che uso per verificare se una stringa sembra un indirizzo di posta valido:

function looksLikeMail(str) {
    var lastAtPos = str.lastIndexOf('@');
    var lastDotPos = str.lastIndexOf('.');
    return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}

Spiegazione:

  • lastAtPos < lastDotPos: Last @dovrebbe essere precedente all'ultimo .poiché @non può far parte del nome del server (per quanto ne so).

  • lastAtPos > 0: Dovrebbe esserci qualcosa (il nome utente dell'email) prima dell'ultimo @.

  • str.indexOf('@@') == -1: Non ci dovrebbe essere nessun @@indirizzo. Anche se @appare come l'ultimo carattere nel nome utente dell'email, deve essere citato, quindi "dovrebbe essere compreso tra quello @e l'ultimo @nell'indirizzo.

  • lastDotPos > 2: Dovrebbero essere presenti almeno tre caratteri prima dell'ultimo punto, ad esempio a@b.com.

  • (str.length - lastDotPos) > 2: Dovrebbero esserci abbastanza caratteri dopo l'ultimo punto per formare un dominio di due caratteri. Non sono sicuro se le parentesi sono necessarie.


Questo fn sembra carino, ma è meglio del regex scritto nella risposta migliore?
Atul Goyal,

4
Ne dubito. Lo uso solo per verificare se una stringa assomiglia a un'e-mail e lasciare i dettagli sul codice lato server.
Miloš Rašić,

Convalida OK qualsiasi stringa come "aaaa", ovvero senza "@" e "."
Gennady Shumakher,

1
Non dovrebbe. lastIndexOf () dovrebbe restituire -1 se non trova l'ago.
Miloš Rašić,

"Anche se @appare come l'ultimo carattere nel nome utente dell'email, deve essere citato, quindi "dovrebbe essere compreso tra quello @e l'ultimo @nell'indirizzo." Che dire "@@"@example.com?
Ry-

47

Questo è stato rubato da http://codesnippets.joyent.com/posts/show/1917

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}

7
Questo filtra sempre popolari .museume .traveldomini (a causa del limite di 4 caratteri dopo .)
bobobobo

4
Cambiare da {2,4} a {2,6} non sarà un problema
Anton N

11
@Anton N: ha anche circa un gazillion di altri problemi; il finale {2,4}è semplicemente un utile indicatore di ciò (come in "quando vedi quell'errore, è probabile che altri siano presenti"). Il più elementare è la mancanza +nella parte locale; questa casella di commento è troppo piccola per evidenziare tutti gli errori commessi sopra.
Piskvor lasciò l'edificio il

37
Perché non puoi farlo return filter.test(email.value);?
MT.

3
@AntonN: ora abbiamo più di 10 caratteri TLD ( xn--clchc0ea0b2g2a9gcd). Non è ancora un problema?
Piskvor lasciò l'edificio il

42

Fai questo:

[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?

Perché? È basato su RFC 2822 , che è uno standard TUTTI gli indirizzi e-mail DEVONO aderire. E non sono sicuro del motivo per cui ti dovresti preoccupare di qualcosa di "più semplice" ... lo copierai e incollerai comunque;)

Spesso quando si memorizzano gli indirizzi e-mail nel database, li rendo minuscoli e, in pratica, i regex possono in genere essere contrassegnati senza distinzione tra maiuscole e minuscole. In questi casi questo è leggermente più breve:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

Ecco un esempio del suo utilizzo in JavaScript (con il flag insensibile alle maiuscole ialla fine).

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('some.body@domain.co.uk') );

Nota :
tecnicamente alcune e-mail possono includere virgolette nella sezione prima del @simbolo con caratteri di escape all'interno delle virgolette (quindi l'utente e-mail può essere odioso e contenere cose come @e "..."purché sia ​​scritto tra virgolette). NESSUNO LO FA MAI! È obsoleto Tuttavia, è incluso nel vero standard RFC 2822 e omesso qui.

Ulteriori informazioni: http://www.regular-expressions.info/email.html


@Kondal il codice javascript non fa distinzione tra maiuscole e minuscole a causa del /iflag alla fine dell'espressione regolare. Cito il fatto che deve essere un confronto senza distinzione tra maiuscole e minuscole, ma lo renderò più chiaro.
Ryan Taylor,

Ha funzionato per me come un incantesimo
Alex,

40

Non vedo davvero l'ora di risolvere questo problema. Quindi ho modificato l'espressione regolare di convalida dell'email sopra

  • Originale
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

  • Modificato
    /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

per passare gli esempi nell'indirizzo e -mail di Wikipedia .

E puoi vedere il risultato qui .

inserisci qui la descrizione dell'immagine


Sembra una buona soluzione, funziona anche con nuovi TLD e e-mail da 1 lettera
Mark Hughes,

Perché non john..doe@example.comdovrebbe essere corretto? È un caso d'angolo valido.
Valerio Bozz,

24

Non utilizzare espressioni regolari per convalidare una stringa di input per verificare se si tratta di un'e-mail. È troppo complicato e non coprirebbe tutti i casi.

Ora poiché puoi coprire solo il 90% dei casi, scrivi qualcosa del tipo:

function isPossiblyValidEmail(txt) {
   return txt.length > 5 && txt.indexOf('@')>0;
}

Puoi perfezionarlo. Ad esempio, "aaa @" è valido. Ma nel complesso hai capito. E non lasciarti trasportare ... Una soluzione semplice al 90% è migliore della soluzione al 100% che non funziona.

Il mondo ha bisogno di un codice più semplice ...


15
Ciò consente l'inserimento di così tanti indirizzi e-mail non validi che è un consiglio inutile.
cazlab

3
Non deve essere impossibile eseguire il debug. Ci sono molti ottimi esempi in questo thread che convalidano oltre "contiene un" @ ". Il tuo esempio consente a" u @ "di essere considerato un indirizzo email valido. Almeno valuta se esiste un dominio o qualcosa che potrebbe essere un dominio. Il tuo è un esempio di ciò che definirei "codifica aggressivamente pigra". Non sono sicuro del motivo per cui lo stai difendendo in quanto è di gran lunga la risposta più bassa nel thread.
cazlab

3
@cazlab forse hai ragione. Dopo tutto, sono stato votato verso il basso. Diversamente da te, non penso che nessuno dei codici sopra mostra frammenti di debug facili. Il mio approccio "aggressivamente pigro" può almeno essere migliorato, se necessario.
Zo72,

3
In che modo differisce dall'uso di regex? (.+)@(.*)fa la stessa cosa e più breve.
snostorm

4
+1 - Se l'obiettivo è assicurarsi che l'utente abbia almeno tentato di inserire un indirizzo e-mail, quindi verificare se è possibile determinare se l'indirizzo e-mail NON è sicuramente un indirizzo e-mail è un ottima soluzione. Un buon esempio potrebbe essere se si desidera che il nome utente di una persona sia un indirizzo e-mail. Se l'utente digita 'sexy_chick_23', allora questa regex può essere usata per dare loro un avviso che è prevista una e-mail. Se viene digitato qualcosa che assomiglia a un'e-mail, ma non lo è, l'utente non riceverà mai l'e-mail di "conferma" e il processo di registrazione non verrà mai convalidato.
Chris Dutrow,

23

Controlla semplicemente se l'indirizzo email inserito è valido o non utilizza HTML.

<input type="email"/>

Non è necessario scrivere una funzione per la convalida.


4
IE <10 non supporta questo, e nemmeno il proprio browser Android.
Frank Conijn,

7
Upvoting. IE <10 è morto.
Michael Scheper,

19

È difficile ottenere un validatore e-mail corretto al 100%. L'unico vero modo per ottenerlo corretto sarebbe inviare un'email di prova all'account. Detto questo, ci sono alcuni controlli di base che possono aiutarti a ottenere qualcosa di ragionevole.

Alcune cose da migliorare:

Invece di nuovo RegExp, prova a scrivere regexpin questo modo:

if (reg.test(/@/))

In secondo luogo, verificare che sia presente un punto dopo il @segno e assicurarsi che vi siano caratteri tra la @s e i punti.


19

Ecco come fa il validatore di nodi :

/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/

14

Usa questo codice all'interno della tua funzione di validazione:

var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
    alert("Please enter correct email ID")
    return false;
}

Altrimenti puoi usare jQuery . Le regole interne definiscono:

eMailId: {
    required: true,
    email: true
}

1
abc@xyzè un'e-mail perfettamente valida che non viene riconosciuta dal tuo regex.
Toto

3
No non lo è. Il modello di email corretto è qualcosa@something.something, abc @ xyz non corrisponde a quel modello. Quindi, non è un indirizzo valido.
Orchid


5
Hai la pagina di Wikipedia? Un TLD è un nome host valido. Quindi abc@tldè un indirizzo email valido.
Tot

2
L'unico modo per convalidare un indirizzo e-mail è inviare un'e-mail e attendere la risposta. A parte questo, ecco un URL in cui puoi verificare se il tuo indirizzo è conforme a RFC822: mythic-beasts.com/~pdw/cgi-bin/emailvalidate . Puoi vedere che abc @ xyz è un indirizzo valido per RFC822.
Tot

14

Aggiornamento Regex 2018! prova questo

let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
   console.log('passed');
}

versione dattiloscritta completa

//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);

maggiori informazioni https://git.io/vhEfc


Questo non è riuscito per un email@domain.com serie
ricks

1
@RickS questo semplicemente non è vero. Per favore, ricontrolla
malimo,

13

Una soluzione che non verifica l'esistenza del TLD è incompleta.

Quasi tutte le risposte a queste domande suggeriscono di utilizzare Regex per convalidare gli indirizzi e-mail. Penso che Regex sia buono solo per una validazione rudimentale. Sembra che la verifica della convalida degli indirizzi e-mail sia in realtà due problemi separati:

1- Convalida del formato e-mail: assicurarsi che l'e-mail sia conforme al formato e al modello delle e-mail in RFC 5322 e se il TLD esiste effettivamente. Un elenco di tutti i TLD validi è disponibile qui .

Ad esempio, sebbene l'indirizzo example@example.cccpassi il regex, non è un indirizzo email valido, perché cccnon è un dominio di primo livello di IANA.

2- Accertarsi che l'e-mail esista effettivamente: per fare ciò, l'unica opzione è inviare agli utenti un'e-mail .


13

Regex per la convalida dell'indirizzo e-mail

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+

Non vedo il tuo regexp in RFC5322: tools.ietf.org/html/rfc5322 - c'è qualche errore?
Kamil Kiełczewski,

"Il miglior regex di sempre"? Forse una sorta di spiegazione qui?
connectyourcharger

Perché hai detto che è la soluzione migliore di tutte, puoi spiegarci un po 'di più, per favore?
nancoder,

Non riesco a ricordare perché ho scritto "il miglior regex di sempre". Mi dispiace ragazzi se questo ti dà fastidio.
Prabhat Kasera,

12

Ecco un'ottima discussione sull'uso delle espressioni regolari per convalidare gli indirizzi e-mail; " Confronto dell'indirizzo e-mail che convalida le espressioni regolari "

Ecco l'espressione superiore corrente, compatibile con JavaScript, a scopo di riferimento:

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

9
-1 La whitelisting lascia molto a desiderare - in particolare, ti sei perso .jobs. Inoltre, ci sono IDN live (la maggior parte dei quali, lo ammetto, sono stati ufficialmente approvati solo dopo il tuo post - ad esempio .中國nel giugno 2010; ma la maggior parte è stata in lavorazione per anni).
Piskvor lasciò l'edificio il

2
-1 non usa domini di primo livello costanti. C'è sempre (e ci sarà ad esempio il 2013) che potrebbero essere aggiunti nuovi tld.
miho,

Sono stati confermati 100 di nuovi TLD. Questa risposta non è valida e non dovrebbe mai essere utilizzata.
Decano Meehan,

Sì. L'ho detto nel 2011, e lo dirò di nuovo: una lista bianca di domini "speciali" peggiorerà col tempo, man mano che verranno approvati più TLD. Ci sono più di 100 TLD completamente validi che non corrispondono alla
lista

È il 2015. La tua espressione non è pratica. Dovresti prendere questa risposta, ma probabilmente sei troppo occupato a sistemare tutte le pagine su cui metti questa espressione. Giusto?
Eric Leroy,


12

A differenza di squirtle , ecco una soluzione complessa, ma fa un ottimo lavoro nel validare correttamente le e-mail:

function isEmail(email) { 
    return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
} 

Usa così:

if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); }

10
Non hai bisogno del == truetuo esempio.
Luke Alderton,

11

La mia conoscenza delle espressioni regolari non è così buona. Ecco perché controllo prima la sintassi generale con una semplice espressione regolare e successivamente controllo opzioni più specifiche con altre funzioni. Questa potrebbe non essere la migliore soluzione tecnica, ma in questo modo sono molto più flessibile e veloce.

Gli errori più comuni che ho riscontrato sono gli spazi (specialmente all'inizio e alla fine) e occasionalmente un doppio punto.

function check_email(val){
    if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution
        // Do something
        return false;
    }
    if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
        // Do something
        return false;
    }
    return true;
}

check_email('check@thiscom'); // Returns false
check_email('check@this..com'); // Returns false
check_email(' check@this.com'); // Returns false
check_email('check@this.com'); // Returns true

10
<form name="validation" onSubmit="return checkbae()">
    Please input a valid email address:<br />

    <input type="text" size=18 name="emailcheck">
    <input type="submit" value="Submit">
</form>

<script language="JavaScript1.2">
    var testresults
    function checkemail(){
        var str = document.validation.emailcheck.value
        var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
        if (filter.test(str))
            testresults = true
        else {
            alert("Please input a valid email address!")
            testresults = false
        }
        return (testresults)
    }
</script>

<script>
    function checkbae(){
        if (document.layers || document.getElementById || document.all)
            return checkemail()
        else
            return true
    }
</script>

Forse se hai aggiunto una spiegazione o una descrizione per andare con esso? Non penso che tu abbia davvero bisogno di mostrare alcun HTML; tutte le persone interessate sono javascript e regex. Se riduci la tua risposta a solo il JavaScript e aggiungi un po 'di confusione per farlo, ti darò un voto.
bgmCoder

9

Stavo cercando un Regex in JS che superi tutti i casi di test dell'indirizzo email:

  • email@example.com Email valida

  • firstname.lastname@example.com L'e-mail contiene un punto nel campo dell'indirizzo

  • email@subdomain.example.com L'email contiene punto con sottodominio

  • firstname+lastname@example.com Il segno più è considerato un carattere valido

  • email@192.0.2.123 Il dominio è un indirizzo IP valido

  • email@[192.0.2.123] La parentesi quadra attorno all'indirizzo IP è considerata valida

  • “email”@example.com Le citazioni sull'email sono considerate valide

  • 1234567890@example.com Le cifre nell'indirizzo sono valide

  • email@domain-one.example Il trattino nel nome di dominio è valido

  • _______@example.com Il carattere di sottolineatura nel campo dell'indirizzo è valido

  • email@example.name .name è un nome di dominio di primo livello valido

  • email@example.co.jpAnche il punto nel nome di dominio di primo livello è considerato valido (usando co.jpcome esempio qui)

  • firstname-lastname@example.com Il trattino nel campo dell'indirizzo è valido

Eccoci qui :

http://regexr.com/3f07j

O regex:

Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/

8

L'espressione regolare fornita da Microsoft all'interno di ASP.NET MVC è

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

Che inserisco qui nel caso sia difettoso, anche se è sempre stato perfetto per le mie esigenze.


1
Non consente i + nella parte del nome dell'email.
Paul Go
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.