Patricks de réponse semble assez bien élaboré, mais a quelques défauts.
- Vous souhaitez regrouper des parties de la regex mais ne voulez pas les capturer.Par conséquent, vous devrez utiliser des parenthèses sans capture.
- L'alternance est partiellement erronée.
- Il ne teste pas si cela faisait partie de la chaîne ou de la chaîne entière
- Il utilise Regex.Match au lieu de Regex.IsMatch.
Une meilleure solution en C# serait:
string emailAddress = "[email protected]";
if (Regex.IsMatch(emailAddress, @"^[A-Z0-9._%+-][email protected](?:\.co\.uk|(?:group)?\.com)$", RegexOptions.IgnoreCase))
{
// email address is valid
}
Bien sûr d'être complètement sûr que toutes les adresses e-mail passe, vous pouvez utiliser une expression plus approfondie:
string emailAddress = "[email protected]";
if (Regex.IsMatch(emailAddress, @"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@home(?:\.co\.uk|(?:group)?\.com)$", RegexOptions.IgnoreCase))
{
// email address is valid
}
Ceci est l'un de ces les choses que les gens soulignent comme une utilisation classique des expressions régulières qui est terriblement difficile à obtenir correctement. Le simple fait qu'il y ait tant de réponses qui pointent les bogues dans les réponses des autres ne fait que le prouver. Et c'est la raison pour laquelle j'essaie d'éviter les expressions régulières pour des choses bien connues comme les adresses e-mail, les URL, etc. Utilisez une bibliothèque. – Lee
Dans ce cas, toutefois, l'utilisation d'une bibliothèque signifie la validation après la publication plutôt que la validation sur le formulaire. Certains codes sont difficiles à écrire, mais valent la peine d'être écrits. –