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.