Partager via


Comment : vérifier que des chaînes sont dans un format d'adresse de messagerie valide

L'exemple suivant vérifie qu'une chaîne est dans un format d'adresse de messagerie valide.

Exemple

L'exemple définit une méthode IsValidEmail qui retourne la valeur true si la chaîne contient une adresse de messagerie valide et false dans le cas contraire, mais elle n'effectue aucune autre action. Pour vérifier que l'adresse de messagerie est valide, la méthode appelle la méthode Regex.IsMatch(String, String) afin de s'assurer que l'adresse est conforme à un modèle d'expression régulière. Vous pouvez utiliser IsValidEmail pour filtrer les adresses de messagerie qui contiennent des caractères non valides avant que votre application ne stocke les adresses dans une base de données ou les affiche dans une page ASP.NET.

Notez que la méthode IsValidEmail n'effectue pas l'authentification pour valider l'adresse de messagerie. Elle détermine simplement si son format est valide.

Imports System.Text.RegularExpressions

Module RegexUtilities
   Function IsValidEmail(strIn As String) As Boolean
       ' Return true if strIn is in valid e-mail format.
       Return Regex.IsMatch(strIn, _
              "^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" + _
              "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$")
   End Function
End Module
using System;
using System.Text.RegularExpressions;

public class RegexUtilities
{
   public static bool IsValidEmail(string strIn)
   {
       // Return true if strIn is in valid e-mail format.
       return Regex.IsMatch(strIn, 
              @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" + 
              @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"); 
   }
}

Dans cet exemple, le modèle d'expression régulière ^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$ peut être interprété comme indiqué dans le tableau ci-dessous.

Modèle

Description

^

Commence la correspondance au début de la chaîne.

(?("")

Détermine si le premier caractère est un guillemet. (?("") est le début d'une construction d'alternative.

((?("")("".+?""@)

Si le premier caractère est un guillemet, établit une correspondance avec un guillemet de début suivi d'au moins une occurrence de tout caractère, suivie d'un guillemet de fin. La chaîne doit se terminer par un arobase (@).

|(([0-9a-zA-Z]

Si le premier caractère n'est pas un guillemet, établit une correspondance avec un caractère alphabétique (de a à z) ou un chiffre (de 0 à 9).

(\.(?! \.))

Si le caractère suivant est un point, établit une correspondance avec un point. Dans le cas contraire, effectue une préanalyse du caractère suivant et continue la recherche de correspondances. (?!\.) est une assertion de préanalyse négative de largeur nulle qui empêche deux points consécutifs de s'afficher dans la partie locale d'une adresse de messagerie.

|[-!#\$%&'\*\+/=\? \^`\{\}\|~\w]

Si le caractère suivant n'est pas un point, établit une correspondance avec un caractère alphabétique ou l'un des caractères suivants : -!#$%'*+=?^`{}|~.

((\.(?! \.))|[-!#\$%'\*\+/=\? \^`\{\}\|~\w])*

Établit une correspondance avec le modèle d'alternative (un point suivi d'un autre caractère qu'un point, ou l'un des caractères) zéro, une ou plusieurs fois.

@

Établit une correspondance avec l'arobase (@).

(?<=[0-9a-zA-Z])

Continue la recherche de correspondances si le caractère qui précède le caractère @ est compris entre A et Z, a et z, ou 0 et 9. La construction (?<=[0-9a-zA-Z]) définit une assertion de postanalyse positive de largeur nulle.

(?(\[)

Vérifie si le caractère qui suit @ est un crochet ouvrant.

(\[(\d{1,3}\.){3}\d{1,3}\])

S'il s'agit d'un crochet ouvrant, établit une correspondance avec le crochet ouvrant suivi d'une adresse IP (quatre ensembles de un à trois chiffres, chaque ensemble étant séparé par un point) et d'un crochet fermant.

|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6})

Si le caractère qui suit @ n'est pas un crochet ouvrant, établit une correspondance avec un caractère alphanumérique ayant une valeur comprise entre A à Z, a et z, ou 0 et 9, suivi de zéro, une ou plusieurs occurrences d'un caractère alphabétique ou d'un trait d'union, suivi d'un caractère alphanumérique ayant une valeur comprise entre A et Z, a et z ou 0-9, suivi d'un point. Ce modèle peut être répété une ou plusieurs fois et doit être suivi de deux à six caractères alphabétiques (a-z, A-Z). Cette partie de l'expression régulière est conçue pour capturer le nom de domaine.

Compilation du code

La méthode IsValidEmail peut être incluse dans une bibliothèque de méthodes utilitaires d'expression régulière, ou être incluse en tant que méthode d'instance ou statique privée dans la classe d'application. Si elle est utilisée comme une méthode statique dans une bibliothèque d'expressions régulières, elle peut être appelée en utilisant du code semblable au code suivant :

Public Class Application
   Public Shared Sub Main()
      Dim emailAddresses() As String = { "david.jones@proseware.com", "d.j@server1.proseware.com", _
                                         "jones@ms1.proseware.com", "j.@server1.proseware.com", _
                                         "j@proseware.com9", "js#internal@proseware.com", _
                                         "j_9@[129.126.118.1]", "j..s@proseware.com", _
                                         "js*@proseware.com", "js@proseware..com", _
                                         "js@proseware.com9", "j.s@server1.proseware.com" }

      For Each emailAddress As String In emailAddresses
         If RegexUtilities.IsValidEmail(emailAddress) Then
            Console.WriteLine("Valid: {0}", emailAddress)
         Else
            Console.WriteLine("Invalid: {0}", emailAddress)
         End If      
      Next                                            
   End Sub
End Class
' The example displays the following output:
'       Valid: david.jones@proseware.com
'       Valid: d.j@server1.proseware.com
'       Valid: jones@ms1.proseware.com
'       Invalid: j.@server1.proseware.com
'       Invalid: j@proseware.com9
'       Valid: js#internal@proseware.com
'       Valid: j_9@[129.126.118.1]
'       Invalid: j..s@proseware.com
'       Invalid: js*@proseware.com
'       Invalid: js@proseware..com
'       Invalid: js@proseware.com9
'       Valid: j.s@server1.proseware.com
public class Application
{
   public static void Main()
   {
      string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com", 
                                  "jones@ms1.proseware.com", "j.@server1.proseware.com", 
                                  "j@proseware.com9", "js#internal@proseware.com", 
                                  "j_9@[129.126.118.1]", "j..s@proseware.com", 
                                  "js*@proseware.com", "js@proseware..com", 
                                  "js@proseware.com9", "j.s@server1.proseware.com" };
      foreach (string emailAddress in emailAddresses)
      {
         if (RegexUtilities.IsValidEmail(emailAddress))
            Console.WriteLine("Valid: {0}", emailAddress);
         else
            Console.WriteLine("Invalid: {0}", emailAddress);
      }                                            
   }
}
// The example displays the following output:
//       Valid: david.jones@proseware.com
//       Valid: d.j@server1.proseware.com
//       Valid: jones@ms1.proseware.com
//       Invalid: j.@server1.proseware.com
//       Invalid: j@proseware.com9
//       Valid: js#internal@proseware.com
//       Valid: j_9@[129.126.118.1]
//       Invalid: j..s@proseware.com
//       Invalid: js*@proseware.com
//       Invalid: js@proseware..com
//       Invalid: js@proseware.com9
//       Valid: j.s@server1.proseware.com

Voir aussi

Concepts

Expressions régulières du .NET Framework