Validation par e-mail Regex


215

J'utilise ceci

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

regexp pour valider l'e-mail

([\w\.\-]+)- c'est pour le domaine de premier niveau (beaucoup de lettres et chiffres, aussi point et trait d'union)

([\w\-]+)- c'est pour le domaine de deuxième niveau

((\.(\w){2,3})+)- et c'est pour les autres domaines de niveau (de 3 à l'infini) qui comprend un point et 2 ou 3 littéraux

quel est le problème avec cette expression régulière?

EDIT: il ne correspond pas à l'e-mail "something@someth.ing"


1
Autre que vous n'incluez pas de caractères valides, comme spécifié par les RFC 5321 et 5322 - rien.
— Brad Christie


Je pense que vous devez nous dire ce qui ne va pas et d'autres ici peuvent vous aider à réparer la mauvaise chose.
— Uwe Keim

10
Vous avez un problème -> vous pensez 'regex' -> maintenant vous avez 2 problèmes ;-)
— Jakub Konecki

1
Juste un commentaire sur votre expression régulière. Avec ces nouveaux domaines .amsterdam, .info et d'autres domaines, l'expression régulière devrait être:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
— Ton Snoei

Réponses:


371

Les TLD comme .museum ne correspondent pas de cette façon, et il y a quelques autres TLD longs. En outre, vous pouvez valider les adresses e-mail à l'aide de la classe MailAddress comme Microsoft l'explique ici dans une note:

Au lieu d'utiliser une expression régulière pour valider une adresse e-mail, vous pouvez utiliser la classe System.Net.Mail.MailAddress. Pour déterminer si une adresse e-mail est valide, transmettez l'adresse e-mail au constructeur de classe MailAddress.MailAddress (String).

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

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

Cela vous évite beaucoup de maux de tête car vous n'avez pas à écrire (ou essayer de comprendre l'expression régulière de quelqu'un d'autre).


63
Cela n'a pas attrapé les doubles points ".." ni les espaces en ligne ".". J'irai plutôt avec l'expression
— régulière

33
Malgré cela, c'est une réponse populaire. Ce n'est pas correct, ne parvenez pas à capturer au moins deux formats invalides: "Abc. @ Example.com", "Abc..123 @ example.com"
— sean717

12
@ sean717: Voir le RFC et / ou le lien . Je suis d'accord que vos exemples ne fonctionneront probablement pas dans le monde réel, mais cela ne les rend pas invalides.
— Dan Pichelman

13
Que cela fonctionne ou non en utilisant try catch pour valider l'entrée n'est pas une pratique recommandée. Regex est certainement la meilleure façon de procéder.
— mrt

159
-1 Morceau de code incorrect. Attraper une exception n'est pas le moyen de valider les champs.
— ken2k

99

Je pense que ça @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"devrait marcher.
Vous devez l'écrire comme

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

Soyez averti que cela échouera si:

  1. Il y a un sous-domaine après le @symbole.

  2. Vous utilisez un TLD d'une longueur supérieure à 3, tel que .info


2
Renvoie test@-online.com comme valide. Doit être invalide.
— Mathias F

7
Je crois que cela échouera sur les nouveaux TLD qui sont émis, car vous pouvez maintenant avoir des TLD avec plus de 3 caractères.
— AaronLS

Cette expression régulière autorise "somename@gmail.com.in.in.in.in" comme valide.
— Curiosité

14
gmail.com.in.in.in.in est un nom de domaine parfaitement valide, donc je ne vois pas pourquoi il ne devrait pas être autorisé?
— larsw

D'accord avec @larsw, le regex ne doit pas être utilisé
— Boris Sokolov

68

J'ai une expression pour vérifier les adresses e-mail que j'utilise.

Puisqu'aucune des réponses ci-dessus n'était aussi courte ou aussi précise que la mienne, j'ai pensé la publier ici.

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

Pour plus d'informations, lisez-le ici: C # - Email Regular Expression

En outre, cela vérifie la validité RFC en fonction de la syntaxe des e-mails, et non pas si l'e-mail existe vraiment. La seule façon de tester l'existence réelle d'un e-mail est d'envoyer et d'envoyer un e-mail et de demander à l'utilisateur de vérifier qu'il a bien reçu l'e-mail en cliquant sur un lien ou en entrant un jeton.

Ensuite, il existe des domaines jetables, tels que Mailinator.com, etc. Cela ne fait rien pour vérifier si un e-mail provient d'un domaine jetable ou non.


C'est celui que je cherchais - merci! Prend les points doubles ".." et les espaces blancs ".".
— Benny Skogberg

5
J'ai mis à jour mon projet d'expression régulière pour avoir des tests unitaires et j'ai même corrigé quelques bugs: C # - Email Regular Expression rhyous.com/2010/06/15/csharp-email-regular-expression
— Rhyous

Avec les nouveaux TLD, nous devrions peut-être remplacer [a-zA-Z] {2,4} dans la troisième ligne par un {0} puis faire un string.format (pattern, pipeSeparatedAllowedTlds) où pipeSeparatedAllowedTlds devrait être créé par itération à travers ce fichier: data.iana.org/TLD/tlds-alpha-by-domain.txt
— Rhyous

12
Parth. Pouvez-vous me dire quelle règle RFC est enfreinte par votre e-mail? Parce que devinez quoi. Selon RFC, c'est valable !!!! Si vous avez acheté l'URL in.in, vous pouvez créer cette adresse e-mail. Comprendre?
— Rhyous

2
En fait, il semble que je l'ai déjà mis à jour sur mon github ici: github.com/rhyous/EmailRegEx . Cependant, \ w peut inclure des traits de soulignement, il se peut donc que je doive le modifier pour plus de précision.
— Rhyous

36

J'ai trouvé un bon document sur MSDN pour cela.

Comment: vérifier que les chaînes sont au format e-mail valide http://msdn.microsoft.com/en-us/library/01escwtf.aspx (vérifiez que ce code prend également en charge l'utilisation de caractères non ASCII pour les noms de domaine Internet. )

Il existe 2 implémentations, pour .Net 2.0 / 3.0 et pour .Net 3.5 et supérieur.
la version 2.0 / 3.0 est:

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})(\]?)$"); 
}

Mes tests sur cette méthode donnent:

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
Ne correspond pas[me]@whatever.museum
— Toto

Invalide: Abc.example.com OUI, cela fonctionne correctement, cependant, ce "toms.email. @ Gmail.com"; ne fonctionne pas
— Tom Stickel

1
J'ai dû ajouter un signe plus: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 le caractère laissé sur] Google et l'aliassage hotmail permettent le signe plus dans la première section avant le signe @.
— Henk J Meulekamp

C'est la même chose que ci-dessus. permettant "somename@gmail.com.in.in.in" comme adresse e-mail valide ... !!
— Curiosité

9
@ParthTrivedi Pourquoi insistez-vous pour que ce somename@gmail.com.in.in.inne soit pas une adresse e-mail valide?
— Ivaylo Slavov

15

Le code suivant est basé sur l'implémentation d'annotations de données de Microsoft sur github et je pense que c'est la validation la plus complète pour les e-mails:

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
Agréable d'obtenir cela d'une source professionnelle (rien bien sûr contre les autres); apprécié.
— Nicholas Petersen

1
Ce devrait être le meilleur regex car il semble valider les RFC 5321 et 5322. Il manque quelques tests unitaires.
— ToXinE

Ne capture pas de point à la fin de l'adresse e-mail.
— Sellorio

12

Cela ne répond pas à toutes les exigences des RFC 5321 et 5322, mais cela fonctionne avec les définitions suivantes.

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

Ci-dessous le code

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
cette expression ne correspond pas aux adresses valides !#$%&'*+-/=?^_. {|} ~ @ example.com` ou celle-ciDörte@Sörensen.example.com
— TS

7

Meilleure expression rationnelle de validation des e-mails

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

Et c'est l'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);

6

Essayez ceci pour la taille:

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

Essayez ça, ça marche pour moi:

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

Ce regex fonctionne parfaitement:

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

Celui-ci empêche les e-mails invalides mentionnés par d'autres dans les commentaires:

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

Il empêche également les e-mails à double point:

hello..world@example..com

Essayez de le tester avec autant d'adresses e-mail invalides que possible.

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}$).*");
}

Voir valider l'adresse e-mail à l'aide d'une expression régulière en C # .


Cela renvoie faux pour toutes mes adresses e-mail invalides. Malheureusement, renvoie également false pour de nombreuses adresses e-mail valides.
— Mark

4

Pourquoi ne pas utiliser la validation des e-mails basée sur les attributs EF6?

Comme vous pouvez le voir ci-dessus, la validation Regex pour le courrier électronique a toujours un trou. Si vous utilisez des annotations de données EF6, vous pouvez facilement obtenir une validation e-mail fiable et renforcée avec l'attribut d'annotation de données EmailAddress disponible à cet effet. J'ai dû supprimer la validation regex que j'utilisais auparavant pour les e-mails lorsque j'ai reçu un échec regex spécifique au périphérique mobile sur le champ de saisie e-mail. Lorsque l'attribut d'annotation de données utilisé pour la validation des e-mails, le problème sur mobile a été résolu.

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

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+)*");
}

J'utilise le code ci-dessus pour valider l'adresse 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);
    }

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme
— AStopher

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

1

Il a fallu de nombreuses tentatives pour créer un validateur de courrier électronique qui répond à presque toutes les exigences mondiales en matière de courrier électronique.

Méthode d'extension avec laquelle vous pouvez appeler:

myEmailString.IsValidEmailAddress();

Chaîne de modèle d'expression régulière que vous pouvez obtenir en appelant:

var myPattern = Regex.EmailPattern;

Le Code (principalement des commentaires):

    /// <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

Pour valider votre identifiant e-mail, vous pouvez simplement créer une telle méthode et l'utiliser.

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

Cela renverra True / False. (ID e-mail valide / non valide)


1

Voici mon approche préférée à ce jour:

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

Ensuite, utilisez l'extension de chaîne créée comme:

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

1

Laissez - moi savoir SI cela ne fonctionne pas :)

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

voici notre Regex pour ce cas:

@"^([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})(\]?)$",

il y a trois parties qui sont contrôlées. le dernier est probablement celui dont vous avez besoin. le terme spécifique {2,6} vous indique la longueur min / max du TLD à la fin. HTH


0

Essayez le code suivant:

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

RECHERCHE DE CORDES À L'AIDE DE LA MÉTHODE REGEX EN C #

Comment valider un e-mail par expression régulière?

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

Utiliser la méthode Reference String.Regex ()


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

Je pense que votre signe d'insertion et votre signe dollar font partie du problème. Vous devriez également modifier un peu l'expression régulière, j'utilise la prochaine @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "


Lorsque vous utilisez le résultat Trim (':')
— ABMoharram

0

Modèle d'e-mail 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

J'utilise Regex.IsMatch ().

Tout d'abord, vous devez ajouter la déclaration suivante:

using System.Text.RegularExpressions;

La méthode ressemble alors à:

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

C'est une méthode privée à cause de ma logique mais vous pouvez mettre la méthode comme statique dans un autre calque tel que "Utilities" et l'appeler d'où vous avez besoin.


0

Il n'y a pas d'expression régulière parfaite, mais celle-ci est assez forte, je pense, basée sur l'étude de la RFC5322 . Et avec l'interpolation de chaînes C #, assez facile à suivre, je pense aussi.

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

Approuvé avec NUnit 2.x.


0

J'ai créé une classe FormValidationUtils pour valider l'e-mail:

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

Validation des e-mails avec 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 ");
   }

Source: validation e - mail c #

Validation sans regex à l' aide du constructeur de classe MailAddress.MailAddress (String)

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

Cela ne correspondra pas me@localhost. Veuillez consulter ces sites: liste des TLD ; adresses valides / invalides ; regex pour l'adresse e-mail RFC822
— Toto
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.