Annak ellenőrzése, hogy a sztringek érvényes e-mail formátumban vannak-e
A cikkben szereplő példa egy reguláris kifejezést használ annak ellenőrzésére, hogy egy sztring érvényes e-mail formátumban van-e.
Ez a reguláris kifejezés viszonylag egyszerűen használható e-mailként. Az e-mailek ellenőrzéséhez hasznos egy reguláris kifejezés használata annak érdekében, hogy az e-mailek struktúrája helyes legyen. Ez azonban nem helyettesítés az e-mail tényleges meglétének ellenőrzéséhez.
✔️ DO használjon egy kis reguláris kifejezést az e-mailek érvényes szerkezetének ellenőrzéséhez.
✔️ DO küldjön egy teszt e-mailt az alkalmazás felhasználója által megadott címre.
❌ Ne használjon normál kifejezést az e-mailek érvényesítésének egyetlen módjaként.
Ha megpróbálja létrehozni a tökéletes reguláris kifejezést annak ellenőrzésére, hogy az e-mailek struktúrája helyes-e, a kifejezés annyira összetett lesz, hogy hihetetlenül nehéz hibakeresést vagy javítást végezni. A reguláris kifejezések nem tudják ellenőrizni, hogy létezik-e e e-mail, még akkor sem, ha megfelelően van strukturálva. Az e-mailek ellenőrzésének legjobb módja egy teszt e-mail küldése a címre.
Figyelmeztetés
System.Text.RegularExpressions A nem megbízható bemenetek feldolgozásakor időtúllépést kell megadni. A rosszindulatú felhasználók adhatnak RegularExpressions
meg bemenetet a szolgáltatásmegtagadási támadáshoz. ASP.NET core framework API-k, amelyek időtúllépést használnak RegularExpressions
.
Példa
A példa meghatároz egy metódust IsValidEmail
, amely akkor ad vissza true
, ha a sztring érvényes e-mail-címet tartalmaz, és false
ha nem, de nem hajt végre más műveletet.
Annak ellenőrzéséhez, hogy az e-mail-cím érvényes-e, a metódus a IsValidEmail
reguláris kifejezésmintával hívja meg Regex.Replace(String, String, MatchEvaluator) a (@)(.+)$
metódust, hogy elkülönítse a tartománynevet az e-mail-címtől. A harmadik paraméter egy MatchEvaluator delegált, amely azt a metódust jelöli, amely feldolgozza és lecseréli a megfeleltetett szöveget. A reguláris kifejezésmintát a következőképpen értelmezi a rendszer:
Minta | Leírás |
---|---|
(@) |
Egyezzen a @ karakterével. Ez a rész az első rögzítési csoport. |
(.+) |
Egy vagy több karakter előfordulásának egyezése. Ez a rész a második rögzítési csoport. |
$ |
Fejezd be a sztring végén lévő egyezést. |
A tartománynév és a @ karakter a metódusnak lesz átadva DomainMapper
. A metódus az osztály használatával lefordítja az IdnMapping USA-ASCII karaktertartományon kívüli Unicode-karaktereket a Punycode-ra. A metódus a invalid
jelölőt is beállítja, True
ha a IdnMapping.GetAscii metódus érvénytelen karaktereket észlel a tartománynévben. A metódus a @ szimbólum előtti Punycode tartománynevet adja vissza a IsValidEmail
metódusnak.
Tipp.
Javasoljuk, hogy az egyszerű (@)(.+)$
reguláris kifejezésmintával normalizálja a tartományt, majd adjon vissza egy értéket, amely azt jelzi, hogy az áthaladt vagy sikertelen volt. A cikkben szereplő példa azonban azt ismerteti, hogyan használható egy reguláris kifejezés az e-mail ellenőrzéséhez. Függetlenül attól, hogy hogyan érvényesíti az e-maileket, mindig küldjön egy teszt e-mailt a címre, hogy meggyőződjön róla, hogy létezik.
A IsValidEmail
metódus ezután meghívja a Regex.IsMatch(String, String) metódust annak ellenőrzésére, hogy a cím megfelel-e egy reguláris kifejezésmintának.
A IsValidEmail
módszer csupán azt határozza meg, hogy az e-mail formátum érvényes-e egy e-mail-címre; nem ellenőrzi, hogy létezik-e az e-mail. A metódus emellett nem ellenőrzi, IsValidEmail
hogy a legfelső szintű tartománynév érvényes tartománynév-e az IANA gyökérzóna-adatbázisában, amelyhez keresési művelet szükséges.
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
Ebben a példában a rendszer a reguláris kifejezésmintát ^[^@\s]+@[^@\s]+\.[^@\s]+$
az alábbi táblázatban látható módon értelmezi. A reguláris kifejezés a RegexOptions.IgnoreCase jelölő használatával lesz lefordítva.
Minta | Leírás |
---|---|
^ |
Kezdje el az egyezést a sztring elején. |
[^@\s]+ |
Egyezzen meg egy vagy több olyan karakter előfordulásával, amely nem a @ karaktert vagy a szóközt jelöli. |
@ |
Egyezzen a @ karakterével. |
[^@\s]+ |
Egyezzen meg egy vagy több olyan karakter előfordulásával, amely nem a @ karaktert vagy a szóközt jelöli. |
\. |
Egyetlen pont karakterének egyezése. |
[^@\s]+ |
Egyezzen meg egy vagy több olyan karakter előfordulásával, amely nem a @ karaktert vagy a szóközt jelöli. |
$ |
Fejezd be a sztring végén lévő egyezést. |
Fontos
Ez a reguláris kifejezés nem egy érvényes e-mail-cím minden aspektusára vonatkozik. Példaként szolgál arra, hogy szükség esetén kiterjesztse.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: