Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Příklad v tomto článku používá regulární výraz k ověření, že řetězec je v platném e-mailovém formátu.
Tento regulární výraz je poměrně jednoduchý na to, co lze skutečně použít jako e-mail. Použití regulárního výrazu k ověření e-mailu je užitečné k zajištění správné struktury e-mailu. Nejedná se ale o náhradu za ověření, že e-mail skutečně existuje.
✔️ Použijte malý regulární výraz ke kontrole platné struktury e-mailu.
✔️ Odešlete testovací e-mail na adresu poskytnutou uživatelem vaší aplikace.
❌ Nepoužívejte regulární výraz jako jediný způsob, jak ověříte e-mail.
Pokud se pokusíte vytvořit dokonalý regulární výraz, abyste ověřili správnost struktury e-mailu, výraz se stane tak složitým, že je neuvěřitelně obtížné ladit nebo vylepšit. Regulární výrazy nemůžou ověřit, že e-mail existuje, i když je správně strukturovaný. Nejlepším způsobem, jak ověřit e-mail, je odeslat testovací e-mail na adresu.
Upozorňující
Při zpracování System.Text.RegularExpressions nedůvěryhodného vstupu předejte vypršení časového limitu. Uživatel se zlými úmysly může poskytnout vstup RegularExpressions, což způsobí útok na dostupnost služby. ASP.NET rozhraní API architektury Core, která používají RegularExpressions vypršení časového limitu.
Příklad
Příklad definuje metodu IsValidEmail , která vrátí true , pokud řetězec obsahuje platnou e-mailovou adresu a false pokud ne, ale neprovádí žádnou jinou akci.
Pokud chcete ověřit platnost e-mailové adresy, IsValidEmail metoda volá Regex.Replace(String, String, MatchEvaluator) metodu se vzorem (@)(.+)$ regulárního výrazu, aby oddělil název domény od e-mailové adresy. Třetí parametr je MatchEvaluator delegát, který představuje metodu, která zpracovává a nahrazuje odpovídající text. Vzor regulárního výrazu se interpretuje takto:
| Vzor | Popis |
|---|---|
(@) |
Porovná znak @. Tato část je první zachycenou skupinou. |
(.+) |
Porovná jeden nebo více výskytů libovolného znaku. Tato část je druhou zachycenou skupinou. |
$ |
Ukončete shodu na konci řetězce. |
Název domény spolu se znakem @ se předá DomainMapper metodě. Metoda používá třídu k překladu IdnMapping znaků Unicode, které jsou mimo rozsah znaků US-ASCII na Punycode. Metoda také nastaví invalid příznak, pokud TrueIdnMapping.GetAscii metoda zjistí neplatné znaky v názvu domény. Metoda vrátí název domény punycode před znakem @ metodě IsValidEmail .
Tip
Doporučujeme použít jednoduchý (@)(.+)$ vzor regulárního výrazu k normalizaci domény a vrátit hodnotu, která označuje, že se předala nebo selhala. Příklad v tomto článku ale popisuje, jak použít regulární výraz k dalšímu ověření e-mailu. Bez ohledu na to, jak e-mail ověříte, měli byste na adresu vždy poslat testovací e-mail, abyste měli jistotu, že existuje.
Metoda IsValidEmail pak zavolá metodu Regex.IsMatch(String, String) k ověření, že adresa odpovídá vzoru regulárního výrazu.
Metoda IsValidEmail pouze určuje, jestli je formát e-mailu platný pro e-mailovou adresu. Neověřuje, jestli e-mail existuje. Metoda také neověřuje, IsValidEmail že název domény nejvyšší úrovně je platný název domény uvedený v databázi kořenové zóny IANA, což by vyžadovalo operaci vyhledávání.
using System;
using System.Globalization;
using System.Text.RegularExpressions;
namespace RegexExamples
{
class RegexUtilities
{
public static bool IsValidEmail(string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
try
{
// Normalize the domain
email = Regex.Replace(email, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
// Examines the domain part of the email and normalizes it.
string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();
// Pull out and process domain name (throws ArgumentException on invalid)
string domainName = idn.GetAscii(match.Groups[2].Value);
return match.Groups[1].Value + domainName;
}
}
catch (RegexMatchTimeoutException e)
{
return false;
}
catch (ArgumentException e)
{
return false;
}
try
{
return Regex.IsMatch(email,
@"^[^@\s]+@[^@\s]+\.[^@\s]+$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
}
}
Imports System.Globalization
Imports System.Text.RegularExpressions
Public Class RegexUtilities
Public Shared Function IsValidEmail(email As String) As Boolean
If String.IsNullOrWhiteSpace(email) Then Return False
' Use IdnMapping class to convert Unicode domain names.
Try
'Examines the domain part of the email and normalizes it.
Dim DomainMapper =
Function(match As Match) As String
'Use IdnMapping class to convert Unicode domain names.
Dim idn = New IdnMapping
'Pull out and process domain name (throws ArgumentException on invalid)
Dim domainName As String = idn.GetAscii(match.Groups(2).Value)
Return match.Groups(1).Value & domainName
End Function
'Normalize the domain
email = Regex.Replace(email, "(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200))
Catch e As RegexMatchTimeoutException
Return False
Catch e As ArgumentException
Return False
End Try
Try
Return Regex.IsMatch(email,
"^[^@\s]+@[^@\s]+\.[^@\s]+$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250))
Catch e As RegexMatchTimeoutException
Return False
End Try
End Function
End Class
V tomto příkladu je vzor ^[^@\s]+@[^@\s]+\.[^@\s]+$ regulárního výrazu interpretován, jak je znázorněno v následující tabulce. Regulární výraz je zkompilován pomocí příznaku RegexOptions.IgnoreCase .
| Vzor | Popis |
|---|---|
^ |
Zahajte shodu na začátku řetězce. |
[^@\s]+ |
Porovná jeden nebo více výskytů jakéhokoli jiného znaku než znak @ nebo prázdné znaky. |
@ |
Porovná znak @. |
[^@\s]+ |
Porovná jeden nebo více výskytů jakéhokoli jiného znaku než znak @ nebo prázdné znaky. |
\. |
Porovná jeden znak tečky. |
[^@\s]+ |
Porovná jeden nebo více výskytů jakéhokoli jiného znaku než znak @ nebo prázdné znaky. |
$ |
Ukončete shodu na konci řetězce. |
Důležité
Tento regulární výraz není určený k pokrytí všech aspektů platné e-mailové adresy. Poskytuje se jako příklad, který můžete podle potřeby rozšířit.