Postupy: Ověření, zda jsou řetězce v platném formát pro e-mail
Následující příklad ověří, zda je řetězec v platném formátu pro e-mailovou adresu.
Příklad
Příklad definuje metodu IsValidEmail, která vrátí true jestliže řetězec obsahuje platnou e-mailovou adresu a false pokud ne. Neprovádí však žádné další akce. Pro ověření platnosti e-mailové adresy je volána metoda Regex.IsMatch(String, String) pro ověření, zda adresa odpovídá regulárnímu výrazu. Můžete použít IsValidEmail pro vyfiltrování e-mailových adres, které obsahují neplatné znaky před tím, než aplikace uloží adresy do databáze, nebo je zobrazí na stránce technologie ASP.NET.
Všimněte si, že metoda IsValidEmail neověřuje platnost e-mailové adresy při ověřování správnosti jejího formátu. Pouze určuje, zda její formát je platný pro formát e-mailové adresy.
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}))$");
}
}
V tomto příkladu vzorce regulárního výrazu ^(?("")("".+?""@)|(([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}))$ lze interpretovat podle následující tabulky.
Maska |
Popis |
---|---|
^ |
Začne porovnávání na začátku řetězce. |
(?("") |
Zjistěte, zda je první znak uvozovky. (?("")je začátek Konstrukt alternace. |
((?("")("".+?""@) |
Pokud je první znak uvozovky, odpovídat Počáteční uvozovka následované alespoň jeden výskyt libovolný znak následovaný koncové uvozovky. Řetězec by měl uzavřít s zavináč (@). |
|(([0-9a-zA-Z] |
Není prvním znakem znak uvozovek, odpovídat libovolný znak abecedy od do z nebo libovolný číselný znak 0 9. |
(\.(?! \.)) |
Pokud je další znak tečka, aby odpovídal. Pokud není období hledat další znak a shoda pokračovat. (?!\.)je negativní kontrola dopředu nulové šířce výrazu, který bránil zobrazení dvou po sobě jdoucích obdobích v místní části e-mailové adresy. |
|[-!#\$%&'\*\+/=\? \^`\{\}\|~\w] |
Pokud není další znak tečka, odpovídá libovolný znak, slovo nebo některý z následujících znaků: -!#$%'*+=?^`{}|~. |
((\.(?! \.))|[-!#\$%'\*\+/=\? \^`\{\}\|~\w])* |
Odpovídají alternace vzorku (období následuje mimo období nebo jeden počet znaků) nebo nulovou vícekrát. |
@ |
Shoda znaku @. |
(?<=[0-9a-zA-Z]) |
Pokud znak, který předchází pokračovat shoda znaku @ je a až Z, a až z nebo 0 až 9. (?<=[0-9a-zA-Z]) Konstrukci definuje výraz nulové šířce pozitivní kontrola dozadu. |
(?(\[) |
Zkontrolujte, zda je znak @ následující úvodní závorku. |
(\[(\d{1,3}\.){3}\d{1,3}\]) |
Pokud je úvodní závorku, odpovídající otevírací závorka následovaný adresou IP (čtyři sady jednoho až tří číslic s každou sadu oddělených tečkou) a pravou hranatou závorku. |
|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}) |
Pokud není znak @ následující otevírací závorka, jeden alfanumerický znak odpovídající hodnotou A-Z, a-z nebo 0-9, následuje nula nebo více výskytů znaku slovo nebo pomlčku, následuje alfanumerický znak s hodnotou A-Z, a-z nebo 0-9, následovaný tečkou. Tento vzor lze opakovat jednu nebo více časy a by měla následovat dva až šest abecední znaky (a-z, A-Z). Tato část regulárního výrazu je určena k zachycení název domény. |
Probíhá kompilace kódu
Meoda IsValidEmail může být součástí knihovny pomocných metod regulárních výrazů, nebo může být zahrnuta jako soukromá statická metoda nebo metoda instance třídy aplikace. Pokud se používá jako statická metoda knihovny regulárních výrazů, může být volána například pomocí následujícího kódu:
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