Megosztás a következőn keresztül:


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 RegularExpressionsmeg 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