2013-04-23 17 views
26

Ho visto una moltitudine di espressioni regolari per diversi linguaggi di programmazione che pretendono tutti di convalidare gli indirizzi di posta elettronica. Ho visto molti commenti che affermano che le espressioni in questione non funzionano in alcuni casi e che sono troppo rigide o troppo permissive. Quello che sto cercando è un'espressione regolare che posso usare nel mio codice C# che è definitivo.Migliore espressione regolare per la convalida dell'e-mail in C#

La cosa migliore che ho trovato è questo

^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$ 

qualcosa di meglio?

+0

Non so troppo sull'argomento, ma ho letto TUTTO SO che NON DEVI usare la regex per la convalida della posta elettronica. –

+0

http://ex-parrot.com/~pdw/Mail-RFC822-Address.html –

+1

Non regex gli indirizzi di posta elettronica. Invia un'email di conferma per verificare che il loro indirizzo email sia corretto. – Romoku

risposta

121

Indirizzo e-mail: RFC 2822 Formato
corrispondente di un indirizzo di posta elettronica normale. Non controlla il dominio di primo livello.
Richiede l'opzione "senza distinzione tra maiuscole e minuscole" per essere attiva.

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

Usage:

bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase); 
+0

Mi spiace, come devo attivare l'opzione "case insensitive"? –

+0

@Johnny_D leggi la sezione Utilizzo, mostra come eseguire questa operazione –

+2

Ciò consente caratteri UTF-8 nella parte locale (ad esempio, dieresi tedesche come Ä, ü, ö o ß)? – connexo

11

Questa funzione C# utilizza un'espressione regolare per valutare se l'indirizzo e-mail passato è sintatticamente valido o meno.

public static bool isValidEmail(string inputEmail) 
{ 
    string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
     @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
     @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; 
    Regex re = new Regex(strRegex); 
    if (re.IsMatch(inputEmail)) 
    return (true); 
    else 
    return (false); 
} 
+0

Questo reg non è testato. Permette l'indirizzo email - [email protected] !!! –

+25

@ParthTrivedi [email protected] è tecnicamente un indirizzo email valido. –

19

Prima opzione (male a causa di rimessa cattura, ma MS farà il lavoro per voi):

bool IsValidEmail(string email) 
{ 
    try { 
     var mail = new System.Net.Mail.MailAddress(email); 
     return true; 
    } 
    catch { 
     return false; 
    } 
} 

Seconda opzione viene letta I Knew How To Validate An Email Address Until I Read The RFC e RFC specification

+8

-1 'System.Net.Mail.MailAddress' approva troppe combinazioni di indirizzi che fallirebbero nella realtà e sono anche errate secondo le specifiche RFC, come' spazio bianco senza escape @ falso $ com'. –

+3

Se lo scopo qui è di inviare una mail con 'System.Net', allora questa convalida è adeguata – JDandChips

+0

Errore in molti casi Ad esempio: [email protected] –

Problemi correlati