Quali caratteri sono ammessi in un indirizzo email?


641

Non sto chiedendo la convalida e-mail completa.

Voglio solo sapere quali sono i caratteri consentiti user-namee le serverparti dell'indirizzo e-mail. Questo può essere semplificato, forse gli indirizzi e-mail possono assumere altre forme, ma non mi interessa. Sto chiedendo solo questo semplice modulo: user-name@server(ad esempio wild.wezyr@best-server-ever.com) e caratteri consentiti in entrambe le parti.


185
Il +è permesso. Mi fa impazzire quando i siti Web non lo consentono perché la mia e-mail contiene un +e quindi molti siti non lo consentono.
Dan Herbert,

42
Penso che sia importante fornire collegamenti alle specifiche, poiché vuoi davvero farlo bene, ed è qui che entra in gioco la specifica. Se sei troppo pigro per leggere e comprendere le specifiche, ti preghiamo di lasciare controllare i caratteri consentiti negli indirizzi e-mail alle persone che si preoccupano di quello stuf.
jhwist,

9
Domanda precedente riguardante lo stesso materiale: stackoverflow.com/questions/760150/ . La cosa triste è, anche se quella domanda è quasi 8 mesi più vecchia di questa, la domanda più vecchia ha risposte molto migliori. Quasi tutte le risposte di seguito erano già obsolete al momento della pubblicazione originale. Vedi la voce di Wikipedia (e non preoccuparti, ha riferimenti ufficiali pertinenti ).
John Y,

10
Contrariamente a diverse risposte, gli spazi sono consentiti nella parte locale degli indirizzi e-mail, se citati. "hello world"@example.comè valido.
user253751

3
@LaraRuffleColes: per Gmail, quando si crea un account e-mail, non è possibile creare indirizzi contenenti un segno "+". Il segno "+" ("Plus-addressing") consente a chiunque abbia un indirizzo Gmail di aggiungere un segno "+" seguito da una "stringa" alla fine del proprio nome utente per creare un indirizzo email "alternativo" ("alias") da utilizzare per il proprio account. Esempio: "esempio@gmail.com", "esempio+tag@gmail.com". Un uso tipico (e probabilmente "primario") di questo è quello di essere in grado di creare indirizzi di posta elettronica alias per il tuo account che ti consentono di taggare e filtrare i messaggi di posta elettronica in arrivo, teoricamente filtrati dal mittente.
Kevin Fegan,

Risposte:


797

Vedere RFC 5322: Formato dei messaggi Internet e, in misura minore, RFC 5321: Simple Mail Transfer Protocol .

RFC 822 copre anche indirizzi e-mail, ma si occupa principalmente della sua struttura:

 addr-spec   =  local-part "@" domain        ; global address     
 local-part  =  word *("." word)             ; uninterpreted
                                             ; case-preserved

 domain      =  sub-domain *("." sub-domain)     
 sub-domain  =  domain-ref / domain-literal     
 domain-ref  =  atom                         ; symbolic reference

E come al solito, Wikipedia ha un articolo decente sugli indirizzi e-mail :

La parte locale dell'indirizzo e-mail può utilizzare uno di questi caratteri ASCII:

  • lettere latine maiuscole e minuscole Ada Ze averso z;
  • cifre 0a 9;
  • personaggi speciali !#$%&'*+-/=?^_`{|}~;
  • punto ., a condizione che non sia il primo o l'ultimo carattere a meno che non sia citato, e purché non appaia consecutivamente a meno che non sia citato (ad es. John..Doe@example.comnon è consentito ma "John..Doe"@example.comè consentito);
  • lo spazio e i "(),:;<>@[\]caratteri sono consentiti con restrizioni (sono consentiti solo all'interno di una stringa tra virgolette, come descritto nel paragrafo seguente, e inoltre, una barra rovesciata o una virgoletta doppia devono essere precedute da una barra rovesciata);
  • sono consentiti commenti tra parentesi alle estremità della parte locale; ad esempio john.smith(comment)@example.come (comment)john.smith@example.comsono entrambi equivalenti a john.smith@example.com.

Oltre ai caratteri ASCII, a partire dal 2012 è possibile utilizzare i caratteri internazionali sopraU+007F , codificati come UTF-8 come descritto nelle specifiche RFC 6532 e spiegato su Wikipedia . Si noti che a partire dal 2019, questi standard sono ancora contrassegnati come proposti, ma vengono implementati lentamente. Le modifiche apportate a questa specifica hanno essenzialmente aggiunto caratteri internazionali come caratteri alfanumerici validi (atext) senza influire sulle regole sui caratteri speciali consentiti e limitati come !#e @:.

Per la convalida, vedere Utilizzo di un'espressione regolare per convalidare un indirizzo e-mail .

La domainparte è definita come segue :

Gli standard Internet (Request for Comments) per i protocolli mandato che le etichette hostname componenti possono contenere solo i caratteri ASCII aattraverso z(in maniera case-insensitive), le cifre 0attraverso 9, e il trattino ( -). La specifica originale dei nomi host in RFC 952 , prevedeva che le etichette non potevano iniziare con una cifra o con un trattino e non devono terminare con un trattino. Tuttavia, una specifica successiva ( RFC 1123 ) ha permesso alle etichette dei nomi host di iniziare con le cifre. Non sono consentiti altri simboli, caratteri di punteggiatura o spazi vuoti.


15
@WildWzyr, non è così semplice. Gli indirizzi e-mail hanno molte regole per ciò che è permesso. È più semplice fare riferimento alle specifiche piuttosto che elencarle tutte. Se vuoi il Regex completo, controlla qui per avere un'idea del perché non è così semplice: regular-expressions.info/email.html
Dan Herbert,

6
non esiste un elenco semplice, solo perché vuoi qualcosa di semplice non significa che sarà così. alcuni personaggi possono trovarsi solo in determinati luoghi e non in altri. non puoi avere quello che vuoi sempre.

15
@WildWezyr Bene, il carattere a punto pieno è consentito nella parte locale. Ma non all'inizio o alla fine. O con un altro punto fermo. Quindi la risposta NON È semplice come solo un elenco di caratteri consentiti, ci sono regole su come questi caratteri possono essere usati - .ann..other.@example.comnon è un indirizzo email valido, ma ann.other@example.comè, sebbene entrambi utilizzino gli stessi caratteri.
Mark Pim,

14
Inoltre, ricorda che con l'arrivo di nomi di dominio internazionalizzati, l'elenco dei caratteri consentiti esploderà.
Chinmay Kanchi,

50
Questa non è più la risposta valida, a causa di indirizzi internazionalizzati. Vedi la risposta di Mason.
Zaccaria,

329

Attento! C'è un sacco di conoscenza marcire in questo thread (cose che prima erano vere e ora non lo sono).

Per evitare il rifiuto di falsi positivi di indirizzi di posta elettronica effettivi nel mondo attuale e futuro e da qualsiasi parte del mondo, è necessario conoscere almeno il concetto di alto livello di RFC 3490 , "Internazionalizzazione dei nomi di dominio nelle applicazioni (IDNA)". So che la gente negli Stati Uniti e A spesso non sono d'accordo, ma è già in uso diffuso e in rapido aumento in tutto il mondo (principalmente le parti non inglesi).

L'essenza è che ora puoi usare indirizzi come mason @ 日本 .com e wildwezyr@fahrvergnügen.net. No, questo non è ancora compatibile con tutto ciò che c'è là fuori (come molti hanno lamentato sopra, anche i semplici indirizzi in stile qmail + ident sono spesso erroneamente respinti). Ma c'è un RFC, c'è una specifica, ora è supportato da IETF e ICANN e, cosa ancora più importante, c'è un numero crescente e crescente di implementazioni a supporto di questo miglioramento che sono attualmente in servizio.

Non sapevo molto di questo sviluppo da solo fino a quando non sono tornato in Giappone e ho iniziato a vedere indirizzi email come hei @ や る .ca e URL Amazon come questo:

http://www.amazon.co.jp/ エ レ ク ト ロ ニ ク ス - デ ジ タ ル カ メ ラ -? ポ ー タ ブ ル オ ー デ ィ オ / b / ref = topnav_storetab_e ie = UTF-8 & node = 3.210.981

So che non vuoi collegamenti a specifiche, ma se fai affidamento esclusivamente sulla conoscenza obsoleta degli hacker nei forum di Internet, il tuo validatore e-mail finirà per rifiutare gli indirizzi e-mail che gli utenti non di lingua inglese si aspettano sempre più di lavorare. Per quegli utenti, tale convalida sarà fastidiosa tanto quanto la comune forma morta di cervello che tutti odiamo, quella che non è in grado di gestire un + o un nome di dominio in tre parti o altro.

Quindi non sto dicendo che non è una seccatura, ma l'elenco completo dei caratteri "ammessi in alcune / nessuna / nessuna" è (quasi) tutti i caratteri in tutte le lingue. Se si desidera "accettare tutti gli indirizzi e-mail validi (e anche molti non validi)", è necessario prendere in considerazione IDN, il che in pratica rende inutile (scusate) un approccio basato sui caratteri, a meno che non si convertano prima gli indirizzi e-mail internazionalizzati in Punycode .

Dopo averlo fatto puoi seguire (la maggior parte) dei consigli sopra.


17
Giusto; dietro le quinte, i nomi di dominio sono ancora solo ASCII. Tuttavia, se l'app o il modulo Web accetta l'input immesso dall'utente, deve eseguire lo stesso lavoro del browser Web o del client di posta quando l'utente immette un nome host IDN: per convertire l'input dell'utente in un modulo compatibile con DNS. Quindi convalidare. In caso contrario, questi indirizzi e-mail internazionalizzati non supereranno la tua convalida. (I convertitori come quello che ho collegato per modificare solo i caratteri non ASCII che vengono dati, quindi è sicuro usarli su indirizzi e-mail non internazionalizzati (quelli sono appena restituiti non modificati).)
Mason

2
Per gli sviluppatori Javascript , ora sto cercando metodi per farlo, e Punycode.js sembra essere la soluzione più completa e raffinata.
wawawaw,

5
Si noti che la posta elettronica internazionalizzata (come attualmente definita) non converte gli indirizzi non ASCII utilizzando il codice di accesso o simile, estendendo invece grandi parti del protocollo SMTP stesso per utilizzare UTF8.
IMSoP,

2
Mi manca qualcosa o questo non risponde alla domanda? Sto leggendo "l'altra risposta è sbagliata, devi accettare più caratteri" ma non riesco a indicare quali caratteri extra. Inoltre, non potevo (facilmente) vedere in quel RFC se significava tutti i punti di codice Unicode o solo il BMP.
Samuel Harmer,

3
Questo sembra essere sulla strada giusta per essere la risposta corretta. Scommetto che otterresti molti più voti se includessi informazioni specifiche sui personaggi riservati e consentiti.
Sean

59

Il formato dell'indirizzo e-mail è: local-part@domain-part(max. 64 a 255 caratteri, non più di 256 in totale).

Il local-parte domain-partpotrebbe avere diversi set di caratteri consentiti, ma non è tutto, in quanto vi sono più regole.

In generale, la parte locale può avere questi caratteri ASCII:

  • minuscole lettere latine: abcdefghijklmnopqrstuvwxyz,
  • maiuscole lettere latine: ABCDEFGHIJKLMNOPQRSTUVWXYZ,
  • cifre: 0123456789,
  • caratteri speciali: !#$%&'*+-/=?^_`{|}~,
  • punto: .(non primo o ultimo carattere o ripetuto se non citato),
  • punteggiatura dello spazio come: "(),:;<>@[\](con alcune restrizioni),
  • commenti: ()(sono ammessi tra parentesi, ad es (comment)john.smith@example.com.).

Parte del dominio:

  • minuscole lettere latine: abcdefghijklmnopqrstuvwxyz,
  • maiuscole lettere latine: ABCDEFGHIJKLMNOPQRSTUVWXYZ,
  • cifre: 0123456789,
  • trattino: -(non il primo o l'ultimo carattere),
  • può contenere un indirizzo IP racchiuso tra parentesi quadre: jsmith@[192.168.2.1]o jsmith@[IPv6:2001:db8::1].

Questi indirizzi e-mail sono validi:

  • prettyandsimple@example.com
  • very.common@example.com
  • disposable.style.email.with+symbol@example.com
  • other.email-with-dash@example.com
  • x@example.com (parte locale di una lettera)
  • "much.more unusual"@example.com
  • "very.unusual.@.unusual.com"@example.com
  • "very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
  • example-indeed@strange-example.com
  • admin@mailserver1 (nome di dominio locale senza dominio di primo livello)
  • #!$%&'*+-/=?^_`{}|~@example.org
  • "()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
  • " "@example.org (spazio tra le virgolette)
  • example@localhost (inviato da localhost)
  • example@s.solutions(vedi l' elenco dei domini di primo livello Internet )
  • user@com
  • user@localserver
  • user@[IPv6:2001:db8::1]

E questi esempi di invalidi:

  • Abc.example.com(nessun @personaggio)
  • A@b@c@example.com( @è consentito solo uno tra virgolette)
  • a"b(c)d,e:f;gi[j\k]l@example.com (nessuno dei caratteri speciali in questa parte locale è consentito al di fuori delle virgolette)
  • just"not"right@example.com (le stringhe tra virgolette devono essere separate da punti o l'unico elemento che costituisce la parte locale)
  • this is"not\allowed@example.com (spazi, virgolette e barre rovesciate possono esistere solo all'interno di stringhe tra virgolette e precedute da una barra rovesciata)
  • this\ still\"not\allowed@example.com (anche se con escape (preceduto da una barra rovesciata), gli spazi, le virgolette e le barre rovesciate devono ancora essere racchiusi tra virgolette)
  • john..doe@example.com(punto doppio prima @); (con un avvertimento: Gmail lo fa passare)
  • john.doe@example..com(doppio punto dopo @)
  • un indirizzo valido con uno spazio iniziale
  • un indirizzo valido con uno spazio finale

Fonte: indirizzo e-mail su Wikipedia


RFC2822 di Perl regex per la convalida delle e-mail:

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

Il regexp completo per gli indirizzi RFC2822 era di soli 3,7k.

Vedi anche: Analizzatore di indirizzi e-mail RFC 822 in PHP .


Le definizioni formali degli indirizzi e-mail sono in:

  • RFC 5322 (sezioni 3.2.3 e 3.4.1, obsoletes RFC 2822), RFC 5321, RFC 3696,
  • RFC 6531 (caratteri consentiti).

Relazionato:


5
Come ulteriore cautela per i potenziali implementatori di questa regex: No. Basta verificare che segua il formato something@something.somethinge chiamarlo un giorno.
Chris Sobolewski,

Mentre qualcosa del genere non è mantenibile, è un buon esercizio decodificare e capire cosa fa
annullare il

@ChrisSobolewski ammette più elementi su entrambi i lati del "@"
Jasen,

Ho provato a implementarlo in postfix tramite la tabella di accesso a pcre con una restrizione check_recipient_access, prima trasformando i 3 pcres lunghi (dalla pagina collegata) in una riga ciascuno e topping e tailing in questo modo: /^[...pcre ..] $ / DUNNO, quindi aggiungendo una riga finale /.*/ REJECT, ma consente comunque tramite indirizzi e-mail non validi. Postfix 3.3.0; perl 5, versione 26, sovversione 1 (v5.26.1).
scoobydoo,

3
Follia, dico io. Chi lo userebbe mai in produzione. C'è un punto in cui l'espressione regolare non dovrebbe più essere usata. È molto al di là di quel punto.
tomuxmon,

22

Wikipedia ha un buon articolo su questo e le specifiche ufficiali sono qui . Da Wikipdia:

La parte locale dell'indirizzo e-mail può utilizzare uno di questi caratteri ASCII:

  • Lettere inglesi maiuscole e minuscole (az, AZ)
  • Cifre da 0 a 9
  • Personaggi ! # $% & '* + - / =? ^ _ `{| } ~
  • Carattere . (punto, punto, punto e virgola) a condizione che non sia il primo o l'ultimo carattere e anche che non compaia due o più volte consecutive.

Inoltre, le stringhe tra virgolette (es .: "John Doe" @ example.com) sono consentite, consentendo così caratteri che sarebbero altrimenti proibiti, tuttavia non compaiono nella pratica comune. RFC 5321 avverte inoltre che "un host che prevede di ricevere posta DOVREBBE evitare di definire le cassette postali in cui la parte locale richiede (o utilizza) il modulo stringa di virgolette".


@WildWezyr Nomi host validi, che potrebbero essere un indirizzo IP, FQN o qualcosa di risolvibile in un host di rete locale.
Jensen è morto il

Le stringhe tra virgolette erano essenziali per passare attraverso un gateway, ricordi Banyan Vines?
mckenzm,

13

Google fa una cosa interessante con i suoi indirizzi gmail.com. Gli indirizzi gmail.com consentono solo lettere (az), numeri e punti (che vengono ignorati).

ad esempio, pikachu@gmail.com è uguale a pi.kachu@gmail.com e entrambi gli indirizzi e-mail verranno inviati alla stessa casella di posta. Anche PIKACHU@gmail.com viene recapitato nella stessa casella di posta.

Quindi, per rispondere alla domanda, a volte dipende dall'implementatore da quanto degli standard RFC vogliono seguire. Lo stile dell'indirizzo gmail.com di Google è compatibile con gli standard. Lo fanno in questo modo per evitare confusione laddove persone diverse prenderebbero indirizzi email simili, ad es

*** gmail.com accepting rules ***
d.oy.smith@gmail.com   (accepted)
d_oy_smith@gmail.com   (bounce and account can never be created)
doysmith@gmail.com     (accepted)
D.Oy'Smith@gmail.com   (bounce and account can never be created)

Il link di Wikipedia è un buon riferimento a ciò che gli indirizzi email generalmente consentono. http://en.wikipedia.org/wiki/Email_address


2
Sì, questa è un'ottima risposta sul perché Gmail non consente di CREARE e-mail con questo. Ma puoi inviare e ricevere e-mail {john'doe}@my.serversenza problemi. Testato anche con il server hMail.
Piotr Kula,

Puoi testare il tuo cliente inviando una mail a {piotr'kula}@kula.solutions- Se funziona otterrai una bella risposta automatica dal modulo. Altrimenti non accadrà nulla.
Piotr Kula,

3
Gmail segue RFC 6530, nel senso che ogni possibile indirizzo e-mail consentito da Gmail è valido secondo RFC. Gmail sceglie semplicemente di limitare ulteriormente l'insieme di indirizzi consentiti con regole aggiuntive e di rendere altrimenti indirizzi simili con punti nella parte locale, eventualmente seguiti da "+" e caratteri alfanumerici.
Teemu Leisti,

Google limita i criteri di creazione dell'account ... Immagino che cancellino la stringa dell'account e-mail in arrivo della "punteggiatura" e del trascinamento più il segno della stringa di alias anteposto in modo che la posta possa essere indirizzata all'account corretto. Vai tranquillo. In tal modo, in realtà non consentono alle persone di creare indirizzi di posta elettronica just-bein-a-jerk in modo che gli indirizzi validi creati passino spesso convalide semplici e complesse.
BradChesney79,

Non è solo Gmail, alcuni provider dispongono di "filtri di inoltro" che rifiutano determinate stringhe tra virgolette, in particolare contenenti "=" come se fossero delimitatori. Questo serve a impedire agli utenti di impostare gateway e annidare gli indirizzi spam nella stringa tra virgolette private. "@" è valido ma "= @ =" non è (considerato) valido.
mckenzm,

12

Puoi iniziare dall'articolo di Wikipedia :

  • Lettere inglesi maiuscole e minuscole (az, AZ)
  • Cifre da 0 a 9
  • Personaggi ! # $% & '* + - / =? ^ _ `{| } ~
  • Carattere . (punto, punto, punto e virgola) a condizione che non sia il primo o l'ultimo carattere e anche che non compaia due o più volte consecutive.

11

Nome:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~.

Server:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.

4
Che dire di <>e []? Ad esempio "()<>[]:,;@\\\"!#$%&'-/=?^_{} | ~ .a "@ example.org`?
kenorb il

20
Si prega di citare le fonti. Senza fonti, sembra congettura.
Mathieu K.

15
Questo non è aggiornato e forse non è mai stato corretto.
Jason Harrison,

9

Controlla @ e. e quindi inviare un'e-mail per la verifica.

Non riesco ancora a utilizzare il mio indirizzo email .name sul 20% dei siti su Internet perché qualcuno ha rovinato la convalida della posta elettronica o perché è precedente alla validità dei nuovi indirizzi.


9
Anche . non è strettamente necessario; Ho sentito di almeno un caso di un indirizzo e-mail in un dominio di primo livello (in particolare ua). L'indirizzo era <name> @ua - nessun punto!

Questo è praticamente il modo più semplice per non sbagliare la convalida, perché quasi tutto è permesso e se qualcosa non è permesso, il server del destinatario ti farà sapere.
Avamandro

5

La risposta breve è che ci sono 2 risposte. C'è uno standard per quello che dovresti fare. cioè un comportamento che è saggio e ti terrà fuori dai guai. C'è un altro standard (molto più ampio) per il comportamento che dovresti accettare senza creare problemi. Questa dualità funziona per l'invio e l'accettazione di e-mail ma ha un'ampia applicazione nella vita.

Per una buona guida agli indirizzi che crei; vedi: http://www.remote.org/jochen/mail/info/chars.html

Per filtrare e-mail valide, basta trasmettere qualsiasi cosa sufficientemente comprensibile per vedere il passaggio successivo. O inizia a leggere un mucchio di RFC, attenzione, ecco i draghi.


Il link è sparito. Che contenuto c'era?
giovedì

5

Una buona lettura in merito .

Estratto:

These are all valid email addresses!

"Abc\@def"@example.com
"Fred Bloggs"@example.com
"Joe\\Blow"@example.com
"Abc@def"@example.com
customer/department=shipping@example.com
\$A12345@example.com
!def!xyz%abc@example.com
_somename@example.com

1
Mi chiedevo "@" prima della parte del dominio. Può essere usato?
Saiyaff Farouk,

@SaiyaffFarouk secondo le specifiche, sì. Tuttavia, la maggior parte dei provider di posta probabilmente non lo consentirà come parte della propria convalida
Luke Madhanga

quel blog elenca Joe.\\Blow@example.comsenza virgolette. Questo è effettivamente valido? Non sembra chiaro date le risposte qui, ma lo sto chiedendo perché ho visto casi (molto rari) di stringhe di posta elettronica con nome DNS SoA che contengono barre rovesciate.
wesinat0r

5

La risposta accettata si riferisce a un articolo di Wikipedia quando si discute la parte locale valida di un indirizzo e-mail, ma Wikipedia non è un'autorità al riguardo.

IETF RFC 3696 è un'autorità in materia e dovrebbe essere consultato nella sezione 3. Restrizioni per gli indirizzi e-mail a pagina 5:

Gli indirizzi e-mail contemporanei sono costituiti da una "parte locale" separata da una "parte di dominio" (un nome di dominio completo) da un segno ("@"). La sintassi della parte del dominio corrisponde a quella della sezione precedente. Le preoccupazioni identificate in quella sezione sul filtraggio e sugli elenchi di nomi si applicano anche ai nomi di dominio utilizzati in un contesto di posta elettronica. Il nome di dominio può anche essere sostituito da un indirizzo IP tra parentesi quadre, ma tale modulo è fortemente sconsigliato, tranne per scopi di test e risoluzione dei problemi.

La parte locale può apparire utilizzando le convenzioni di quotazione descritte di seguito. I moduli citati sono usati raramente nella pratica, ma sono necessari per alcuni scopi legittimi. Pertanto, non devono essere rifiutati nelle routine di filtro, ma devono invece essere passati al sistema di posta elettronica per la valutazione da parte dell'host di destinazione.

La regola esatta è che qualsiasi carattere ASCII, inclusi i caratteri di controllo, può apparire tra virgolette o in una stringa tra virgolette. Quando è necessario un preventivo, il carattere barra rovesciata viene utilizzato per citare il seguente carattere. Per esempio

  Abc\@def@example.com

è una forma valida di un indirizzo email. Potrebbero anche apparire spazi vuoti, come in

  Fred\ Bloggs@example.com

Il carattere barra rovesciata può anche essere usato per citare se stesso, ad es.

  Joe.\\Blow@example.com

Oltre a quotare usando il carattere barra rovesciata, è possibile utilizzare caratteri convenzionali a virgoletta doppia per circondare le stringhe. Per esempio

  "Abc@def"@example.com

  "Fred Bloggs"@example.com

sono forme alternative dei primi due esempi sopra. Questi moduli citati sono raramente raccomandati e sono poco comuni nella pratica, ma, come discusso in precedenza, devono essere supportati da applicazioni che elaborano indirizzi e-mail. In particolare, le forme citate appaiono spesso nel contesto di indirizzi associati a transizioni da altri sistemi e contesti; tali requisiti transitori persistono e, poiché un sistema che accetta un indirizzo e-mail fornito dall'utente non può "sapere" se tale indirizzo è associato a un sistema legacy, i moduli dell'indirizzo devono essere accettati e passati nell'ambiente e-mail.

Senza virgolette, le parti locali possono consistere in qualsiasi combinazione di
caratteri alfabetici, cifre o uno qualsiasi dei caratteri speciali

  ! # $ % & ' * + - / = ?  ^ _ ` . { | } ~

può anche apparire il punto ("."), ma non può essere usato per iniziare o terminare la parte locale, né possono apparire due o più periodi consecutivi. Detto diversamente, qualsiasi carattere grafico ASCII (in stampa) diverso dal segno at ("@"), barra rovesciata, virgoletta doppia, virgola o parentesi quadre può apparire senza virgolette. Se deve apparire uno di questi elenchi di caratteri esclusi, questi devono essere citati. Forme come

  user+mailbox@example.com

  customer/department=shipping@example.com

  $A12345@example.com

  !def!xyz%abc@example.com

  _somename@example.com

sono validi e vengono visualizzati abbastanza regolarmente, ma è consentito uno qualsiasi dei personaggi sopra elencati.

Come altri hanno fatto, invio una regex che funziona sia per PHP che JavaScript per convalidare gli indirizzi e-mail:

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

3

Come puoi trovare in questo link di Wikipedia

La parte locale dell'indirizzo e-mail può utilizzare uno di questi caratteri ASCII:

  • lettere latine maiuscole e minuscole Ada Ze averso z;

  • cifre 0a 9;

  • personaggi speciali !#$%&'*+-/=?^_`{|}~;

  • punto ., a condizione che non sia il primo o l'ultimo carattere a meno che non sia citato, e purché non appaia consecutivamente a meno che non sia citato (ad es. John..Doe@example.comnon è consentito ma "John..Doe"@example.comè consentito);

  • lo spazio e i "(),:;<>@[\]caratteri sono consentiti con restrizioni (sono consentiti solo all'interno di una stringa tra virgolette, come descritto nel paragrafo seguente, e inoltre, una barra rovesciata o una virgoletta doppia devono essere precedute da una barra rovesciata);

  • sono consentiti commenti tra parentesi alle estremità della parte locale; ad esempio john.smith(comment)@example.come (comment)john.smith@example.comsono entrambi equivalenti a john.smith@example.com.

Oltre ai precedenti caratteri ASCII, i caratteri internazionali sopra U + 007F, codificati come UTF-8, sono consentiti da RFC 6531 , sebbene i sistemi di posta elettronica possano limitare quali caratteri utilizzare quando si assegnano parti locali.

Una stringa tra virgolette può esistere come entità separata da punti all'interno della parte locale, oppure può esistere quando le virgolette più esterne sono i caratteri più esterni della parte locale (ad esempio, abc."defghi".xyz@example.como "abcdefghixyz"@example.comsono consentite. Al contrario, abc"defghi"xyz@example.comnon lo è; né lo è abc\"def\"ghi@example.com). Stringhe e caratteri tra virgolette tuttavia, non sono comunemente usati. RFC 5321 avverte inoltre che "un host che prevede di ricevere posta DOVREBBE evitare di definire le cassette postali in cui la parte locale richiede (o utilizza) il modulo stringa di virgolette".

La parte locale postmasterviene trattata in modo speciale: non fa distinzione tra maiuscole e minuscole e deve essere inoltrata all'amministratore della posta elettronica del dominio. Tecnicamente tutti gli altri locali-parti sono case-sensitive, quindi jsmith@example.come JSmith@example.comspecificano cassette postali differenti; tuttavia, molte organizzazioni trattano le lettere maiuscole e minuscole come equivalenti.

Nonostante l'ampia gamma di caratteri speciali tecnicamente validi; le organizzazioni, i servizi di posta, i server di posta e i client di posta in pratica spesso non li accettano tutti. Ad esempio, Windows Live Hotmail consente solo la creazione di indirizzi e-mail utilizzando alfanumerici, punto ( .), trattino basso ( _) e trattino ( -). Un consiglio comune è di evitare l'uso di alcuni caratteri speciali per evitare il rischio di e-mail rifiutate.


0

La risposta è (quasi) ALL(ASCII a 7 bit).
Se le regole di inclusione sono "... consentite in alcune / nessuna / nessuna condizione ..."

Solo osservando una delle diverse possibili regole di inclusione per il testo consentito nella parte "testo di dominio" in RFC 5322 nella parte superiore della pagina 17 troviamo:

dtext          =   %d33-90 /          ; Printable US-ASCII
                   %d94-126 /         ;  characters not including
                   obs-dtext          ;  "[", "]", or "\"

gli unici tre caratteri mancanti in questa descrizione sono usati in domain-letteral [], per formare una coppia tra virgolette \e il carattere dello spazio bianco (% d32). Con ciò viene utilizzato l'intero intervallo 32-126 (decimale). Un requisito simile appare come "qtext" e "ctext". Sono ammessi / utilizzati anche molti caratteri di controllo. Un elenco di tali caratteri di controllo appare nella sezione 31 della sezione 4.1 di RFC 5322 come obs-NO-WS-CTL.

obs-NO-WS-CTL  =   %d1-8 /            ; US-ASCII control
                   %d11 /             ;  characters that do not
                   %d12 /             ;  include the carriage
                   %d14-31 /          ;  return, line feed, and
                   %d127              ;  white space characters

Tutti questi caratteri di controllo sono consentiti come indicato all'inizio della sezione 3.5:

.... MAY be used, the use of US-ASCII control characters (values
     1 through 8, 11, 12, and 14 through 31) is discouraged ....

E tale regola di inclusione è quindi "troppo ampia". O, in altri sensi, la regola attesa è "troppo semplicistica".


0

Per semplicità, disinfetto l'invio rimuovendo tutto il testo tra virgolette doppie e quelle associate che racchiudono le virgolette prima della convalida, inserendo il kibosh negli invii di indirizzi e-mail in base a ciò che non è consentito. Solo perché qualcuno può avere John. "L'indirizzo * $ hizzle * Bizzle". L'indirizzo Doe@whatever.com non significa che devo permetterlo nel mio sistema. Viviamo in futuro dove forse ci vorrà meno tempo per ottenere un indirizzo e-mail gratuito che per fare un buon lavoro pulendo il culo. E non è come se i criteri e-mail non fossero intonacati proprio accanto all'ingresso dicendo ciò che è e non è permesso.

Inoltre, disinfetto ciò che non è specificamente consentito da vari RFC dopo la rimozione del materiale citato. L'elenco di caratteri e motivi specificamente vietati sembra essere un elenco molto più breve da provare.

Non consentito:

    local part starts with a period ( .account@host.com )
    local part ends with a period   ( account.@host.com )
    two or more periods in series   ( lots..of...dots@host.com )
    &’`*|/                          ( some&thing`bad@host.com )
    more than one @                 ( which@one@host.com )
    :%                              ( mo:characters%mo:problems@host.com )

Nell'esempio fornito:

John.."The*$hizzle*Bizzle"..Doe@whatever.com --> John..Doe@whatever.com

John..Doe@whatever.com --> John.Doe@whatever.com

L'invio di un messaggio e-mail di conferma al risultato rimanente nel tentativo di aggiungere o modificare l'indirizzo e-mail è un buon modo per vedere se il codice è in grado di gestire l'indirizzo e-mail inviato. Se l'e-mail supera la convalida dopo tutti i cicli di sanificazione necessari, disattiva tale conferma. Se una richiesta ritorna dal link di conferma, la nuova e-mail può essere spostata dallo stato purgatorio o temporaneo di archiviazione || temporanea || per diventare una vera e-mail archiviata di prima classe autentica.

Una notifica di errore o successo nella modifica dell'indirizzo e-mail può essere inviata al vecchio indirizzo e-mail se si desidera essere premurosi. Le configurazioni degli account non confermate potrebbero cadere dal sistema poiché tentativi falliti del tutto dopo un ragionevole lasso di tempo.

Non consento e-mail puzzolenti sul mio sistema, forse questo è solo buttare via i soldi. Tuttavia, il 99,9% delle volte le persone fanno semplicemente la cosa giusta e dispongono di un'e-mail che non supera i limiti di conformità fino al limite utilizzando scenari di compatibilità dei casi limite. Fai attenzione a regex DDoS, questo è un posto dove puoi metterti nei guai. E questo è legato alla terza cosa che faccio, ho messo un limite a quanto tempo sono disposto a elaborare una e-mail. Se è necessario rallentare la macchina per essere convalidato, non sta superando la logica dell'endpoint dell'API dei dati in entrata.

Modifica: questa risposta continuava a essere macchiata per essere "cattiva", e forse se lo meritava. Forse è ancora male, forse no.


2
Credo che questa risposta sia stata sottoposta a downgrade perché questa è un'opinione e in realtà non risponde alla domanda. Inoltre, gli utenti che ottengono il loro indirizzo e-mail silenziosamente igienizzato non riceveranno mai e-mail da te. Faresti meglio a informarli che il loro indirizzo email non è accettato.
Vcarel,

2
Ho il sospetto che i downvotes siano perché ci sono troppe idee qui. L'elenco non consentito, sebbene siano utili unit test, deve essere preceduto da ciò che è consentito. L'approccio di programmazione sembra relativamente buono, ma probabilmente si adatterà meglio dopo aver elencato le specifiche con cui stai lavorando, ecc. Sezioni e lievi modifiche alla copia sarebbero di aiuto. Solo i miei 2 centesimi.
HoldOffHunger

@vcarel - Oh, assolutamente. La convalida lato utente front-end li informerebbe su quali regole (disponibili dalla descrizione comandi) stavano infrangendo. Hai ragione-- è un'opinione generale. Tuttavia, la domanda sopra è di qualcuno che sta sicuramente chiedendo a X una domanda Y. Questa è una guida e funziona ... non solo funziona, funziona bene. Non lascio indirizzi e-mail di cazzate nei miei sistemi in cui prendo le decisioni.
BradChesney79,

@HoldOffHunger Vedo che l'idea generale non è espressa in modo coerente come potrebbe essere, potrei rivedere un altro giorno in cui ho più tempo per esprimerlo meglio. Grazie per la comprensione.
BradChesney79,

-1

Nel mio PHP utilizzo questo controllo

<?php
if (preg_match(
'/^(?:[\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])\]))$/',
"tim'qqq@gmail.com"        
)){
    echo "legit email";
} else {
    echo "NOT legit email";
}
?>

provalo tu stesso http://phpfiddle.org/main/code/9av6-d10r


-1

Ho creato questo regex secondo le linee guida RFC:

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

1
Questa versione migliora la regex controllando la lunghezza del dominio / sottodomini. Godere! ^ [\\ w \\ \\ _ \\% # $ \\ \\ & \\ '= \\ \ * \\ + \\ -.!? \\ / \\ ^ \ `{\\ \\ ????. |} \\ \\ ~] + @ (: [\\ w] (: [\\ w \\ -] {0,61} [\\ w]) (: \\ [\\ w] (?: [\\ w \\ -] {0,61} [\\ w])?) *) $
Mau,

-2

Gmail consentirà solo + segno come carattere speciale e in alcuni casi (.) Ma qualsiasi altro carattere speciale non è consentito su Gmail. RFC afferma che puoi usare caratteri speciali ma dovresti evitare di inviare posta a Gmail con caratteri speciali.

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.