Convalida e-mail Regex


216

Io lo uso

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

regexp per convalidare l'e-mail

([\w\.\-]+)- questo è per il dominio di primo livello (molte lettere e numeri, anche punto e trattino)

([\w\-]+)- questo è per il dominio di secondo livello

((\.(\w){2,3})+)- e questo è per altri domini di livello (da 3 a infinito) che include un punto e 2 o 3 letterali

cosa c'è che non va in questa regex?

EDIT: non corrisponde all'email "qualcosa@someth.ing"


1
Oltre a non includere caratteri validi, come specificato dalle RFC 5321 e 5322 - niente.
Brad Christie,


Penso che devi dirci cosa c'è che non va e quindi gli altri qui possono aiutarti a risolvere la cosa sbagliata.
Uwe Keim,

10
Hai un problema -> pensi che 'regex' -> ora hai 2 problemi ;-)
Jakub Konecki

1
Solo un commento sulla tua regex. Con questi nuovi domini .amsterdam, .info e altri domini la regex dovrebbe essere:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Risposte:


373

I TLD come .museum non sono abbinati in questo modo, e ci sono alcuni altri TLD lunghi. Inoltre, puoi validare gli indirizzi email usando la classe MailAddress come Microsoft spiega qui in una nota:

Invece di utilizzare un'espressione regolare per convalidare un indirizzo e-mail, è possibile utilizzare la classe System.Net.Mail.MailAddress. Per determinare se un indirizzo e-mail è valido, passare l'indirizzo e-mail al costruttore della classe MailAddress.MailAddress (String).

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

Questo ti fa risparmiare molto mal di testa perché non devi scrivere (o cercare di capire la regex di qualcun altro).


63
Questo non ha catturato punti doppi ".." né spazi in linea ".". Vado invece con la regex
Benny Skogberg,

33
Nonostante questa è una risposta popolare. Non è giusto, non riesco a catturare almeno due formati non validi: "Abc. @ Example.com", "Abc..123 @ example.com"
sean717

12
@ sean717: vedi RFC e / o link . Sono d'accordo che i tuoi esempi probabilmente non funzioneranno nel mondo reale, ma ciò non li rende non validi.
Dan Pichelman,

13
Non funziona se non funziona con try catch per convalidare l'input. Regex è sicuramente la strada migliore da percorrere.
sig.

159
-1 Codice errato. La cattura di un'eccezione non è il modo per convalidare i campi.
Ken2k,

99

Penso che @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"dovrebbe funzionare.
Devi scriverlo come

string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
    Response.Write(email + " is correct");
else
    Response.Write(email + " is incorrect");

Tieni presente che ciò non riuscirà se:

  1. C'è un sottodominio dopo il @simbolo.

  2. Si utilizza un TLD con una lunghezza maggiore di 3, ad esempio .info


2
Restituisce test@-online.com come valido. Dovrebbe essere non valido.
Mathias F,

7
Credo che questo fallirà sui nuovi TLD che vengono emessi, dato che ora puoi avere TLD con più di 3 caratteri.
AaronLS,

Questo regex consente "somename@gmail.com.in.in.in.in" come valido.
Curiosità

14
gmail.com.in.in.in.in è un nome di dominio perfettamente valido, quindi non riesco a capire perché non dovrebbe essere consentito?
entro il

D'accordo con @larsw il regex non dovrebbe essere usato
Boris Sokolov il

68

Ho un'espressione per controllare gli indirizzi e-mail che utilizzo.

Poiché nessuna delle precedenti era breve o precisa come la mia, ho pensato di pubblicarlo qui.

@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
+ "@"
+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";

Per maggiori informazioni vai a leggere qui: C # - Email Regular Expression

Inoltre, questo verifica la validità della RFC in base alla sintassi e-mail, non per l'esistenza dell'e-mail. L'unico modo per verificare l'esistenza di un'e-mail è inviare e inviare un'e-mail e fare in modo che l'utente verifichi di aver ricevuto l'e-mail facendo clic su un collegamento o inserendo un token.

Quindi ci sono domini usa e getta, come Mailinator.com e simili. Questo non fa nulla per verificare se un'e-mail proviene o meno da un dominio usa e getta.


Questo è quello che stavo cercando - grazie! Accetta entrambi i punti doppi ".." e gli spazi bianchi ".".
Benny Skogberg,

5
Ho aggiornato il mio progetto di espressione regolare per fare unit test e ho anche corretto un paio di bug: C # - Espressione regolare e-mail rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous

Con i nuovi TLD, dovremmo forse sostituire [a-zA-Z] {2,4} nella terza riga con un {0} e quindi fare un string.format (pattern, pipeSeparatedAllowedTlds) dove pipeSeparatedAllowedTlds dovrebbe essere creato da iterando attraverso questo file: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Parth. Puoi dirmi quale regola RFC è stata violata dalla tua e-mail? Perché indovina un po '. Secondo RFC, è valido !!!! Se hai acquistato l'URL in.in, puoi creare questo indirizzo email. Capire?
Rhyous

2
In realtà, sembra che lo abbia già aggiornato sul mio github qui: github.com/rhyous/EmailRegEx . Tuttavia, \ w può includere caratteri di sottolineatura, quindi potrebbe essere necessario modificarlo per la precisione.
Rhyous,

36

Ho trovato un bel documento su MSDN per questo.

Procedura: verificare che le stringhe siano in un formato di posta elettronica valido http://msdn.microsoft.com/en-us/library/01escwtf.aspx (verificare che questo codice supporti anche l'uso di caratteri non ASCII per i nomi di dominio Internet. )

Ci sono 2 implementazioni, per .Net 2.0 / 3.0 e per .Net 3.5 e versioni successive.
la versione 2.0 / 3.0 è:

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}

I miei test su questo metodo danno:

Invalid: @majjf.com
Invalid: A@b@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#internal@proseware.com
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com

1
Non corrisponde[me]@whatever.museum
Toto

Non valido: Abc.example.com SÌ, che funziona correttamente, tuttavia, questo "toms.email. @ Gmail.com"; non funziona
Tom Stickel,

1
Ho dovuto aggiungere un segno più: `@" ^ ([\ w - \. +] +) @ (([[[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \) |. (. ([\ w -] + \) +)) ([a-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 il carattere lasciato su] Google e aliassing hotmail consentono il segno più nella prima sezione prima del segno @.
Henk J Meulekamp,

Questo è lo stesso di cui sopra. autorizzando "somename@gmail.com.in.in.in" come indirizzo email valido ... !!
Curiosità

9
@ParthTrivedi Perché insisti che somename@gmail.com.in.in.innon sia un indirizzo email valido?
Ivaylo Slavov,

15

Il seguente codice si basa sull'implementazione delle annotazioni dei dati di Microsoft su github e penso che sia la convalida più completa per le e-mail:

public static Regex EmailValidation()
{
    const string pattern = @"^((([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])))\.?$";
    const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

    // Set explicit regex match timeout, sufficient enough for email parsing
    // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set
    TimeSpan matchTimeout = TimeSpan.FromSeconds(2);

    try
    {
        if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null)
        {
            return new Regex(pattern, options, matchTimeout);
        }
    }
    catch
    {
        // Fallback on error
    }

    // Legacy fallback (without explicit match timeout)
    return new Regex(pattern, options);
}

1
Bello ottenere questo da una fonte professionale (niente ovviamente contro gli altri); apprezzato.
Nicholas Petersen,

1
Questo dovrebbe essere il miglior regex perché sembra convalidare gli RFC 5321 e 5322. Manca alcuni test unitari.
ToXinE,

Non acquisisce il punto alla fine dell'indirizzo e-mail.
Sellorio,

12

Questo non soddisfa tutti i requisiti degli RFC 5321 e 5322, ma funziona con le seguenti definizioni.

@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

Di seguito è riportato il codice

const String pattern =
   @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical
   @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email
   @")+" +
   @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

var validEmails = new[] {
        "ma@hostname.com",
        "ma@hostname.comcom",
        "MA@hostname.coMCom",
        "m.a@hostname.co",
        "m_a1a@hostname.com",
        "ma-a@hostname.com",
        "ma-a@hostname.com.edu",
        "ma-a.aa@hostname.com.edu",
        "ma.h.saraf.onemore@hostname.com.edu",
        "ma12@hostname.com",
        "12@hostname.com",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@c@example.com",   // multiple `@`
        "ma...ma@jjf.co",      // continuous multiple dots in name
        "ma@jjf.c",            // only 1 char in extension
        "ma@jjf..com",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "ma.@jjf.com",         // nothing after `.`
        "ma_@jjf.com",         // nothing after `_`
        "ma_@jjf",             // no domain extension 
        "ma_@jjf.",            // nothing after `_` and .
        "ma@jjf.",             // nothing after `.`
    };

foreach (var str in validEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
foreach (var str in invalidEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}

1
questa espressione non corrisponde a indirizzi validi !#$%&'*+-/=?^_. {|} ~ @ example.com` o questoDörte@Sörensen.example.com
TS

7

Migliore regex di convalida della posta elettronica

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

Ed è uso: -

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);

6

Prova questo per dimensioni:

public static bool IsValidEmailAddress(this string s)
{
    var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
    return regex.IsMatch(s);
}

5

Prova questo, funziona per me:

public bool IsValidEmailAddress(string s)
{
    if (string.IsNullOrEmpty(s))
        return false;
    else
    {
        var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        return regex.IsMatch(s) && !s.EndsWith(".");
    }
}

5

Perché non utilizzare la convalida e-mail basata sugli attributi EF6?

Come puoi vedere sopra, la convalida Regex per e-mail ha sempre qualche buco. Se si utilizzano le annotazioni dei dati EF6, è possibile ottenere facilmente una convalida e-mail affidabile e più forte con l'attributo di annotazione dei dati EmailAddress disponibile. Ho dovuto rimuovere la convalida regex che ho usato prima per l'e-mail quando ho riscontrato un errore regex specifico del dispositivo mobile nel campo di input e-mail. Quando l'attributo di annotazione dei dati utilizzato per la convalida della posta elettronica, il problema sul dispositivo mobile è stato risolto.

public class LoginViewModel
{
    [EmailAddress(ErrorMessage = "The email format is not valid")]
    public string Email{ get; set; }

5

Questo regex funziona perfettamente:

bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))\z");
}

4

Questo impedisce email non valide menzionate da altri nei commenti:

Abc.@example.com
Abc..123@example.com
name@hotmail
toms.email.@gmail.com
test@-online.com

Previene anche le e-mail con punti doppi:

hello..world@example..com

Prova a testarlo con tutti gli indirizzi email non validi che riesci a trovare.

using System.Text.RegularExpressions;

public static bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z")
        && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

Vedi convalida l'indirizzo e-mail usando l'espressione regolare in C # .


Questo restituisce false per tutti i miei indirizzi e-mail non validi. Sfortunatamente, restituisce anche false per molti indirizzi e-mail validi.
Segna il

3
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)

1
public static bool ValidateEmail(string str)
{                       
     return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

Uso il codice sopra per convalidare l'indirizzo e-mail.


1
   public bool VailidateEntriesForAccount()
    {
       if (!(txtMailId.Text.Trim() == string.Empty))
        {
            if (!IsEmail(txtMailId.Text))
            {
                Logger.Debug("Entered invalid Email ID's");
                MessageBox.Show("Please enter valid Email Id's" );
                txtMailId.Focus();
                return false;
            }
        }
     }
   private bool IsEmail(string strEmail)
    {
        Regex validateEmail = new Regex("^[\\W]*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z] {2,4}[\\W]*,{1}[\\W]*)*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z]{2,4})[\\W]*$");
        return validateEmail.IsMatch(strEmail);
    }

Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo per quanto riguarda perché e / o come questo codice risponde alla domanda migliora il suo valore a lungo termine
AStopher

1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);

1

Ci sono voluti molti tentativi per creare un validatore e-mail che soddisfi quasi tutti i requisiti mondiali per l'e-mail.

Metodo di estensione che puoi chiamare con:

myEmailString.IsValidEmailAddress();

La stringa del modello Regex che puoi ottenere chiamando:

var myPattern = Regex.EmailPattern;

Il codice (principalmente commenti):

    /// <summary>
    /// Validates the string is an Email Address...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddress(this string emailAddress)
    {
        var valid = true;
        var isnotblank = false;

        var email = emailAddress.Trim();
        if (email.Length > 0)
        {
            // Email Address Cannot start with period.
            // Name portion must be at least one character
            // In the Name, valid characters are:  a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $
            // Cannot have period immediately before @ sign.
            // Cannot have two @ symbols
            // In the domain, valid characters are: a-z 0-9 - .
            // Domain cannot start with a period or dash
            // Domain name must be 2 characters.. not more than 256 characters
            // Domain cannot end with a period or dash.
            // Domain must contain a period
            isnotblank = true;
            valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) &&
                !email.StartsWith("-") &&
                !email.StartsWith(".") &&
                !email.EndsWith(".") && 
                !email.Contains("..") &&
                !email.Contains(".@") &&
                !email.Contains("@.");
        }

        return (valid && isnotblank);
    }

    /// <summary>
    /// Validates the string is an Email Address or a delimited string of email addresses...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';')
    {
        var valid = true;
        var isnotblank = false;

        string[] emails = emailAddress.Split(delimiter);

        foreach (string e in emails)
        {
            var email = e.Trim();
            if (email.Length > 0 && valid) // if valid == false, no reason to continue checking
            {
                isnotblank = true;
                if (!email.IsValidEmailAddress())
                {
                    valid = false;
                }
            }
        }
        return (valid && isnotblank);
    }

    public class Regex
    {
        /// <summary>
        /// Set of Unicode Characters currently supported in the application for email, etc.
        /// </summary>
        public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French

        /// <summary>
        /// Set of Symbol Characters currently supported in the application for email, etc.
        /// Needed if a client side validator is being used.
        /// Not needed if validation is done server side.
        /// The difference is due to subtle differences in Regex engines.
        /// </summary>
        public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/\$";

        /// <summary>
        /// Regular Expression string pattern used to match an email address.
        /// The following characters will be supported anywhere in the email address:
        /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _
        /// The following symbols will be supported in the first part of the email address(before the @ symbol):
        /// !#%&'"=`{}~.-+*?^|\/$
        /// Emails cannot start or end with periods,dashes or @.
        /// Emails cannot have two @ symbols.
        /// Emails must have an @ symbol followed later by a period.
        /// Emails cannot have a period before or after the @ symbol.
        /// </summary>
        public static readonly string EmailPattern = String.Format(
            @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$",                     //  @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$",
            UnicodeCharacters,
            "{1}",
            SymbolCharacters
        );
    }

1

Per convalidare il tuo ID e-mail, puoi semplicemente creare tale metodo e usarlo.

    public static bool IsValidEmail(string email)
    {
        var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
        return !String.IsNullOrEmpty(email) && r.IsMatch(email);
    }

Questo restituirà True / False. (ID e-mail valido / non valido)


1

Questo è il mio approccio preferito finora:

public static class CommonExtensions
{
    public static bool IsValidEmail(this string thisEmail)
        => !string.IsNullOrWhiteSpace(thisEmail) &&
           new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail);
}

Quindi utilizzare l'estensione di stringa creata come:

if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");

1

Fammi sapere se non funziona :)

public static bool isValidEmail(this string email)
{

    string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None);

    if (mail.Length != 2)
        return false;

    //check part before ...@

    if (mail[0].Length < 1)
        return false;

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$");
    if (!regex.IsMatch(mail[0]))
        return false;

    //check part after @...

    string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None);

    if (domain.Length < 2)
        return false;

    regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$");

    foreach (string d in domain)
    {
        if (!regex.IsMatch(d))
            return false;
    }

    //get TLD
    if (domain[domain.Length - 1].Length < 2)
        return false;

    return true;

}

1

ecco il nostro Regex per questo caso:

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

ci sono tre parti, che sono tagliate. l'ultimo è probabilmente quello di cui hai bisogno. il termine specifico {2,6} indica la lunghezza min / max del TLD alla fine. HTH


0

Prova il seguente codice:

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");

0

RICERCA STRINGA UTILIZZANDO IL METODO REGEX IN C #

Come convalidare un'e-mail tramite espressione regolare?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

Utilizzare il metodo String.Regex () di riferimento


0

1

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

2

^(([^<>()[\]\\.,;:\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,}))$

0

Penso che il tuo cursore e il simbolo del dollaro siano parte del problema. Dovresti anche modificare un po 'la regex, io uso il prossimo @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +)"


Quando si utilizza il risultato Trim (':')
ABMoharram

0

Schema email Regex:

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

0

Sto usando Regex.IsMatch ().

Prima di tutto devi aggiungere la prossima dichiarazione:

using System.Text.RegularExpressions;

Quindi il metodo è simile al seguente:

private bool EmailValidation(string pEmail)
{
                 return Regex.IsMatch(pEmail,
                 @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                 @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                 RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}

È un metodo privato a causa della mia logica, ma puoi mettere il metodo come statico in un altro livello come "Utilità" e chiamarlo da dove ti serve.


0

Non esiste un'espressione regolare perfetta, ma questa è piuttosto forte, penso, basata sullo studio di RFC5322 . E con l'interpolazione di stringhe C #, penso che sia abbastanza facile da seguire.

const string atext = @"a-zA-Z\d!#\$%&'\*\+-/=\?\^_`\{\|\}~";
var localPart = $"[{atext}]+(\\.[{atext}]+)*";
var domain = $"[{atext}]+(\\.[{atext}]+)*";
Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), 
Throws.Nothing);

Controllato con NUnit 2.x.


0

Ho creato una classe FormValidationUtils per convalidare la posta elettronica:

public static class FormValidationUtils
{
    const string ValidEmailAddressPattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";

    public static bool IsEmailValid(string email)
    {
        var regex = new Regex(ValidEmailAddressPattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(email);
    }
}

0

Convalida dell'email tramite regex

    string pattern = @"\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";

    //check first string
   if (Regex.IsMatch(EmailId1 , pattern))
   {    
       //if email is valid
        Console.WriteLine(EmailId1+ " is a valid Email address ");
   }

Fonte: convalida e-mail c #

Convalida senza Regex utilizzando il costruttore della classe MailAddress.MailAddress (String)

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}

Questo non corrisponderà me@localhost. Dai un'occhiata a questi siti: elenco TLD ; indirizzi validi / non validi ; regex per indirizzo e-mail RFC822
Toto
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.