Freigeben über


Gewusst wie: Überprüfen von Zeichenfolgen auf ein gültiges E-Mail-Format

Im folgenden Beispiel wird geprüft, ob eine Zeichenfolge ein gültiges E-Mail-Format aufweist.

Beispiel

Im Beispiel wird eine IsValidEmail-Methode definiert, die true zurückgibt, wenn die Zeichenfolge eine gültige E-Mail-Adresse enthält und andernfalls false; es wird jedoch keine andere Aktion ausgeführt. Um zu überprüfen, ob die E-Mail-Adresse gültig ist, ruft die Methode die Regex.IsMatch(String, String)-Methode auf. Diese untersucht, ob die Adresse dem Muster eines regulären Ausdrucks entspricht. Mit "IsValidEmail" können Sie E-Mail-Adressen herausfiltern, die ungültige Zeichen enthalten, bevor die Adressen durch die Anwendung in einer Datenbank gespeichert oder auf einer ASP.NET-Seite angezeigt werden.

Beachten Sie, dass die IsValidEmail-Methode keine Authentifizierung zur Überprüfung der E-Mail-Adresse durchführt. Sie bestimmt nur, ob das Format für eine E-Mail-Adresse gültig ist.

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

In diesem Beispiel kann das Muster eines regulären Ausdrucks ^(?("")("".+?""@)|(([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}))$ wie in der folgenden Tabelle dargestellt interpretiert werden.

Muster

Beschreibung

^

Starten Sie den Vergleich am Beginn der Zeichenfolge.

(?("")

Ermittelt, ob es sich beim ersten Zeichen um ein Anführungszeichen handelt. (?("") ist der Anfang eines Alternierungskonstrukts.

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

Wenn es sich beim ersten Zeichen um ein Anführungszeichen handelt, wird ein öffnendes Anführungszeichen als Übereinstimmung verwendet, dem mindestens ein beliebiges Zeichen und ein schließendes Anführungszeichen folgen. Die Zeichenfolge muss auf ein @-Zeichen enden.

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

Wenn es sich beim ersten Zeichen um kein Anführungszeichen handelt, wird ein beliebiges Buchstabenzeichen von a bis z oder ein beliebiges numerisches Zeichen von 0 bis 9 als Übereinstimmung verwendet.

(\.(?! \.))

Wenn es sich beim nächsten Zeichen um einen Punkt handelt, wird dieser als Übereinstimmung verwendet. Wenn es sich um keinen Punkt handelt, wird bis zum nächsten Zeichen weitergesucht und der Vergleich fortsetzt. (?!\.) ist eine negative Lookaheadassertion mit einer Breite von 0 (null), die verhindert, dass im lokalen Teil einer E-Mail-Adresse zwei aufeinander folgende Punkte enthalten sind.

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

Wenn es sich beim nächsten Zeichen um keinen Punkt handelt, wird ein beliebiges Wortzeichen oder eines der folgenden Zeichen als Übereinstimmung verwendet: -!#$%'*+=?^`{}|~.

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

0 oder mehr Vorkommen des Alternierungsmusters werden als Übereinstimmung verwendet (ein Punkt, dem ein anderes Zeichen als ein Punkt oder eines aus einer Reihe von Zeichen folgt).

@

Das @-Zeichen wird als Übereinstimmung verwendet.

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

Die Suche wird fortgesetzt, wenn es sich bei dem Zeichen, das dem @-Zeichen vorausgeht, ist, um eines der Zeichen A bis Z, a bis z oder 0 bis 9 handelt. Das (?<=[0-9a-zA-Z])-Konstrukt definiert eine positive Lookbehindassertion mit einer Breite von 0 (null).

(?(\[)

Überprüfen Sie, ob es sich bei dem Zeichen, das @ folgt, um eine eckige Klammer links handelt.

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

Wenn es sich um eine eckige Klammer links handelt, wird die eckige Klammer links als Übereinstimmung verwendet, der eine IP-Adresse (vier Gruppen aus einer bis drei Ziffern, jeweils durch einen Punkt getrennt) und eine eckige Klammer rechts folgen.

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

Wenn es sich bei dem Zeichen, das @ folgt, um keine eckige Klammer links handelt, wird ein alphanumerisches Zeichen mit einem Wert von A-Z, a-z oder 0-9 als Übereinstimmung verwendet, dem 0 oder mehr Vorkommen eines Wortzeichens oder eines Bindestrichs und ein alphanumerisches Zeichen mit einem Wert von A-Z, a-z oder 0-9 sowie ein Punkt folgen. Dieses Muster kann ein- oder mehrmals wiederholt werden, und diesem müssen zwei bis sechs Buchstabenzeichen (a-z, A-Z) folgen. Mit diesem Teil des regulären Ausdrucks soll der Domänenname erfasst werden.

Kompilieren des Codes

Die IsValidEmail-Methode kann in einer Bibliothek von Dienstprogrammmethoden für reguläre Ausdrücke oder als private statische oder Instanzenmethode in der Anwendungsklasse enthalten sein. Wenn die Methode als statische Methode in einer Bibliothek für reguläre Ausdrücke verwendet wird, kann sie mit Code aufgerufen werden, wie nachfolgend veranschaulicht:

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

Siehe auch

Konzepte

Reguläre Ausdrücke von .NET Framework