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