web-dev-qa-db-fra.com

Validation d'adresse e-mail dans l'application C # MVC 4: avec ou sans utilisation de Regex

J'ai une application Web MVC 4 et je dois saisir et valider certaines adresses e-mail, sans envoyer d'e-mail à l'adresse e-mail de l'utilisateur.

Actuellement, j'utilise la validation de base des e-mails regex avec ce modèle:

[RegularExpression(@"\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",
        ErrorMessage = "Please enter correct email address")]

Bien que cela valide les adresses e-mail, il transmet [email protected] comme adresse e-mail valide. Pour l'instant j'ai une validation qui nécessite des symboles @ symboles. symboles où les symboles peuvent être numériques/alphabétiques et ._-.

J'ai besoin d'une validation de messagerie plus standard pour mon application MVC 4. Comment je fais ça?

22
dlght

Vous avez besoin d'une expression régulière pour cela. Regardez ici . Si vous utilisez .net Framework4.5, vous pouvez également utiliser this . Comme il est intégré dans .net Framework 4.5. Exemple

[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
75
Ehsan

Développer sur Réponse d'Ehsan ....

Si vous utilisez .Net Framework 4.5, vous pouvez avoir une méthode simple pour vérifier l'adresse e-mail en utilisant EmailAddressAttribute Class dans le code.

private static bool IsValidEmailAddress(string emailAddress)
{
    return new System.ComponentModel.DataAnnotations
                        .EmailAddressAttribute()
                        .IsValid(emailAddress);
}

Si vous envisagez REGEX pour vérifier l'adresse e-mail, lisez:

Je savais comment valider une adresse e-mail jusqu'à ce que je lise la RFC Par Phil Haack

23
Habib

Regex:

[RegularExpression(@"^([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})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]

Ou vous pouvez utiliser simplement:

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
13
whoah

Pourquoi ne pas simplement utiliser le EmailAttribute?

[Email(ErrorMessage = "Bad email")]
public string Email { get; set; }
3
dav_i

Non.

Utilisez une expression régulière pour une vérification rapide de la santé mentale, quelque chose comme .@.., mais presque tous les langages/frameworks ont de meilleures méthodes pour vérifier une adresse e-mail. Utiliser ça.

Il est possible de valider une adresse e-mail avec une expression régulière, mais il s'agit d'une expression régulière longue. Très long .
Et à la fin, vous ne serez pas plus sage. Vous saurez seulement que le format est valide, mais vous ne savez toujours pas s'il s'agit d'une adresse e-mail active. La seule façon de le savoir est d'envoyer un e-mail de confirmation.

1
SQB

Il est surprenant que la question de valider une adresse e-mail revient constamment sur SO!

Vous pouvez trouver une solution pratique souvent mentionnée ici: Comment trouver ou valider une adresse e-mail .

Extrait:

La vertu de mon expression régulière ci-dessus est qu'elle correspond à 99% des adresses e-mail utilisées aujourd'hui. Toutes les adresses e-mail auxquelles elles correspondent peuvent être gérées par 99% de tous les logiciels de messagerie existants. Si vous cherchez une solution rapide, il vous suffit de lire le paragraphe suivant. Si vous voulez connaître tous les compromis et obtenir de nombreuses alternatives parmi lesquelles choisir, lisez la suite.

Voir cette réponse sur SO pour une discussion sur les mérites de l'article au lien ci-dessus. En particulier, le commentaire du 2012-04-17 se lit comme suit:

À tous les plaignants: après 3 heures à expérimenter toutes les solutions proposées dans cette discussion gigantesque, c'est LA SEULE bonne solution Java regex solution que je peux trouver. Aucun des trucs rfc5322 ne fonctionne sur Java regex.

0
DavidRR