Sprawdzanie poprawności adresu e-mail


215

używam tego

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

regexp, aby sprawdzić poprawność wiadomości e-mail

([\w\.\-]+)- dotyczy to domeny pierwszego poziomu (wiele liter i cyfr, także punkt i łącznik)

([\w\-]+)- dotyczy to domeny drugiego poziomu

((\.(\w){2,3})+)- i dotyczy to domen innych poziomów (od 3 do nieskończoności), które zawierają punkt i 2 lub 3 literały

co jest nie tak z tym wyrażeniem regularnym?

EDYCJA: nie pasuje do e-maila „coś@someth.ing”


1
Poza tym nie podajesz prawidłowych znaków, jak określono w RFC 5321 i 5322 - nic.
Brad Christie,


Myślę, że musisz nam powiedzieć, co jest nie tak, a inni tutaj mogą pomóc Ci naprawić złą rzecz.
Uwe Keim,

10
Masz problem -> myślisz „regex” -> teraz masz 2 problemy ;-)
Jakub Konecki

1
Tylko komentarz na temat wyrażenia regularnego. W przypadku tych nowych domen .amsterdam, .info i innych domen, regex powinien wyglądać następująco:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei,

Odpowiedzi:


372

TLD, takie jak .museum, nie są dopasowane w ten sposób, a istnieje kilka innych długich TLD. Ponadto możesz sprawdzić adresy e-mail za pomocą klasy MailAddress, jak Microsoft wyjaśnia tutaj w notatce:

Zamiast używać wyrażenia regularnego do sprawdzania poprawności adresu e-mail, możesz użyć klasy System.Net.Mail.MailAddress. Aby ustalić, czy adres e-mail jest prawidłowy, przekaż go do konstruktora klasy MailAddress.MailAddress (String).

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

To oszczędza Ci wielu bólów głowy, ponieważ nie musisz pisać (lub próbować zrozumieć cudzego wyrażenia regularnego).


63
To nie złapało podwójnych kropek „..” ani spacji wbudowanych ”.”. Zamiast tego pójdę z wyrażeniem regularnym
Benny Skogberg

33
Mimo to jest popularną odpowiedzią. To nie w porządku, nie wychwyć co najmniej dwóch nieprawidłowych formatów: „Abc. @ Przyklad.com”, „Abc .123 @ przyklad.com”
sean717

12
@ sean717: Zobacz RFC i / lub link . Zgadzam się, że twoje przykłady prawdopodobnie nie będą działać w prawdziwym świecie, ale to nie czyni ich nieważnymi.
Dan Pichelman

13
Niezależnie od tego, czy działa sprawdzanie poprawności danych wejściowych za pomocą try catch, nie jest zalecaną praktyką. Regex to zdecydowanie lepszy sposób.
mr.

159
-1 Zły kawałek kodu. Złapanie wyjątku nie jest sposobem sprawdzania poprawności pól.
ken2k

99

Myślę, że @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"powinien działać.
Musisz to tak napisać

string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
    Response.Write(email + " is correct");
else
    Response.Write(email + " is incorrect");

Ostrzegamy, że to się nie powiedzie, jeśli:

  1. Pod @symbolem znajduje się subdomena .

  2. Używasz TLD o długości większej niż 3, np .info


2
Zwraca test@-online.com jako ważny. Powinien być nieważny.
Mathias F

7
Wierzę, że to się nie powiedzie w przypadku nowych wydawanych TLD, ponieważ możesz mieć TLD z więcej niż 3 znakami.
AaronLS

Ta regex pozwala, aby „somename@gmail.com.in.in.in.in” było ważne.
Ciekawość

14
gmail.com.in.in.in.in jest idealnie prawidłową nazwą domeny, więc nie rozumiem, dlaczego nie powinna być dozwolona?
larsw

Zgadzam się z @larsw, nie należy używać wyrażenia regularnego
Boris Sokolov

68

Mam wyrażenie do sprawdzania używanych adresów e-mail.

Ponieważ żadne z powyższych nie było tak krótkie ani tak dokładne jak moje, pomyślałem, że opublikuję to tutaj.

@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
+ "@"
+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";

Aby uzyskać więcej informacji, przeczytaj o tym tutaj: C # - Wyrażenie regularne e-mail

Ponadto sprawdza poprawność RFC na podstawie składni wiadomości e-mail, a nie tego, czy wiadomość rzeczywiście istnieje. Jedynym sposobem sprawdzenia, czy wiadomość rzeczywiście istnieje, jest wysłanie wiadomości e-mail i poproszenie użytkownika o sprawdzenie, czy otrzymała wiadomość e-mail, klikając łącze lub wprowadzając token.

Są też domeny typu „wyrzucane”, takie jak Mailinator.com i tak dalej. Nie robi to nic, aby zweryfikować, czy wiadomość e-mail pochodzi z wyrzucanej domeny, czy nie.


Tego właśnie szukałem - dzięki! Pobiera zarówno podwójne kropki „..”, jak i białe spacje ”.”.
Benny Skogberg

5
Zaktualizowałem mój projekt wyrażeń regularnych, aby mieć testy jednostkowe, a nawet naprawiłem kilka błędów: C # - Wyrażenie regularne e-mail rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous

W przypadku nowych TLD możemy zastąpić [a-zA-Z] {2,4} w trzecim wierszu znakiem {0}, a następnie wykonać string.format (pattern, pipeSeparatedAllowedTlds), gdzie pipeSeparatedAllowedTlds musiałby zostać utworzony przez iteracja po tym pliku: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Parth Czy możesz mi powiedzieć, która reguła RFC jest złamana przez Twój e-mail? Ponieważ zgadnij co. Zgodnie z RFC jest to ważne !!!! Jeśli kupiłeś adres URL w.in, możesz utworzyć ten adres e-mail. Rozumiesz?
Rhyous,

2
Wygląda na to, że już zaktualizowałem to na moim githubie tutaj: github.com/rhyous/EmailRegEx . Jednak \ w może zawierać podkreślenia, więc może być konieczne jego edytowanie w celu zapewnienia dokładności.
Rhyous,

36

Znalazłem dla niego fajny dokument w MSDN.

Instrukcje: sprawdzanie, czy ciągi są w prawidłowym formacie wiadomości e-mail http://msdn.microsoft.com/en-us/library/01escwtf.aspx (sprawdź, czy ten kod obsługuje także znaki spoza ASCII w nazwach domen internetowych. )

Istnieją 2 implementacje, dla .Net 2.0 / 3.0 i .Net 3.5 i wyższych.
wersja 2.0 / 3.0 to:

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}

Moje testy tej metody dają:

Invalid: @majjf.com
Invalid: A@b@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#internal@proseware.com
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com

1
Nie pasuje[me]@whatever.museum
Toto

Nieprawidłowy: Abc.example.com TAK, który działa poprawnie, jednak to „toms.email. @ Gmail.com”; nie działa
Tom Stickel

1
Musiałem dodać znak plus: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "11 znak pozostawiony na] Google i aliasy Hotmail pozwalają na znak plus w pierwszej sekcji przed znakiem @.
Henk J Meulekamp

To jest to samo co powyżej. dopuszczenie „somename@gmail.com.in.in.in” jako prawidłowego adresu e-mail ... !!
Ciekawość

9
@ParthTrivedi Dlaczego nalegasz, że somename@gmail.com.in.in.into nie jest prawidłowy adres e-mail?
Ivaylo Slavov

15

Poniższy kod jest oparty na implementacji adnotacji danych Microsoft na github i myślę, że jest to najbardziej kompletna walidacja wiadomości e-mail:

public static Regex EmailValidation()
{
    const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
    const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

    // Set explicit regex match timeout, sufficient enough for email parsing
    // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set
    TimeSpan matchTimeout = TimeSpan.FromSeconds(2);

    try
    {
        if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null)
        {
            return new Regex(pattern, options, matchTimeout);
        }
    }
    catch
    {
        // Fallback on error
    }

    // Legacy fallback (without explicit match timeout)
    return new Regex(pattern, options);
}

1
Fajnie jest zdobyć to z profesjonalnego źródła (oczywiście w porównaniu z innymi); docenione.
Nicholas Petersen

1
To powinno być najlepsze wyrażenie regularne, ponieważ wydaje się, że sprawdza poprawność RFC 5321 i 5322. Brakuje niektórych testów jednostkowych.
ToXinE,

Nie przechwytuje kropki na końcu adresu e-mail.
Sellorio

12

To nie spełnia wszystkich wymagań RFC 5321 i 5322, ale działa z następującymi definicjami.

@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

Poniżej znajduje się kod

const String pattern =
   @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical
   @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email
   @")+" +
   @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

var validEmails = new[] {
        "ma@hostname.com",
        "ma@hostname.comcom",
        "MA@hostname.coMCom",
        "m.a@hostname.co",
        "m_a1a@hostname.com",
        "ma-a@hostname.com",
        "ma-a@hostname.com.edu",
        "ma-a.aa@hostname.com.edu",
        "ma.h.saraf.onemore@hostname.com.edu",
        "ma12@hostname.com",
        "12@hostname.com",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@c@example.com",   // multiple `@`
        "ma...ma@jjf.co",      // continuous multiple dots in name
        "ma@jjf.c",            // only 1 char in extension
        "ma@jjf..com",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "ma.@jjf.com",         // nothing after `.`
        "ma_@jjf.com",         // nothing after `_`
        "ma_@jjf",             // no domain extension 
        "ma_@jjf.",            // nothing after `_` and .
        "ma@jjf.",             // nothing after `.`
    };

foreach (var str in validEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
foreach (var str in invalidEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}

1
to wyrażenie nie pasuje do poprawnych adresów !#$%&'*+-/=?^_. {|} ~ @ example.com` lub toDörte@Sörensen.example.com
TS

7

Najlepsze wyrażenie sprawdzające poprawność wiadomości e-mail

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

I to jest użycie: -

bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);

6

Spróbuj tego dla rozmiaru:

public static bool IsValidEmailAddress(this string s)
{
    var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
    return regex.IsMatch(s);
}

5

Wypróbuj to, działa dla mnie:

public bool IsValidEmailAddress(string s)
{
    if (string.IsNullOrEmpty(s))
        return false;
    else
    {
        var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        return regex.IsMatch(s) && !s.EndsWith(".");
    }
}

5

Ten regex działa idealnie:

bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))\z");
}

4

Ten zapobiega nieprawidłowym e-mailom wymienionym przez innych w komentarzach:

Abc.@example.com
Abc..123@example.com
name@hotmail
toms.email.@gmail.com
test@-online.com

Zapobiega również e-mailom z podwójnymi kropkami:

hello..world@example..com

Spróbuj go przetestować, używając jak największej liczby nieprawidłowych adresów e-mail.

using System.Text.RegularExpressions;

public static bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z")
        && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

Sprawdź poprawność adresu e-mail za pomocą wyrażenia regularnego w języku C # .


Zwraca wartość false dla wszystkich moich nieprawidłowych adresów e-mail. Niestety zwraca również wartość false dla wielu prawidłowych adresów e-mail.
Mark

4

Dlaczego nie skorzystać z sprawdzania poprawności wiadomości e-mail na podstawie atrybutów EF6?

Jak widać powyżej, sprawdzanie poprawności Regex dla wiadomości e-mail zawsze ma w sobie pewną lukę. Jeśli używasz adnotacji danych EF6, możesz łatwo uzyskać niezawodną i silniejszą weryfikację poczty e-mail dzięki dostępnemu do tego atrybutowi adnotacji danych EmailAddress . Musiałem usunąć sprawdzanie poprawności wyrażenia regularnego, którego użyłem wcześniej do wiadomości e-mail, gdy dostałem błąd wyrażenia regularnego specyficzny dla urządzenia mobilnego w polu wprowadzania wiadomości e-mail. Gdy atrybut adnotacji danych używany do sprawdzania poprawności wiadomości e-mail został rozwiązany.

public class LoginViewModel
{
    [EmailAddress(ErrorMessage = "The email format is not valid")]
    public string Email{ get; set; }

3
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)

1
public static bool ValidateEmail(string str)
{                       
     return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

Używam powyższego kodu, aby zweryfikować adres e-mail.


1
   public bool VailidateEntriesForAccount()
    {
       if (!(txtMailId.Text.Trim() == string.Empty))
        {
            if (!IsEmail(txtMailId.Text))
            {
                Logger.Debug("Entered invalid Email ID's");
                MessageBox.Show("Please enter valid Email Id's" );
                txtMailId.Focus();
                return false;
            }
        }
     }
   private bool IsEmail(string strEmail)
    {
        Regex validateEmail = new Regex("^[\\W]*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z] {2,4}[\\W]*,{1}[\\W]*)*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z]{2,4})[\\W]*$");
        return validateEmail.IsMatch(strEmail);
    }

Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość
AStopher

1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);

1

Podjęto wiele prób stworzenia walidatora e-mail, który spełnia prawie wszystkie światowe wymagania dotyczące poczty e-mail.

Metoda rozszerzenia, z którą możesz zadzwonić:

myEmailString.IsValidEmailAddress();

Ciąg wzorca regex, który można uzyskać, wywołując:

var myPattern = Regex.EmailPattern;

Kod (głównie komentarze):

    /// <summary>
    /// Validates the string is an Email Address...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddress(this string emailAddress)
    {
        var valid = true;
        var isnotblank = false;

        var email = emailAddress.Trim();
        if (email.Length > 0)
        {
            // Email Address Cannot start with period.
            // Name portion must be at least one character
            // In the Name, valid characters are:  a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $
            // Cannot have period immediately before @ sign.
            // Cannot have two @ symbols
            // In the domain, valid characters are: a-z 0-9 - .
            // Domain cannot start with a period or dash
            // Domain name must be 2 characters.. not more than 256 characters
            // Domain cannot end with a period or dash.
            // Domain must contain a period
            isnotblank = true;
            valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) &&
                !email.StartsWith("-") &&
                !email.StartsWith(".") &&
                !email.EndsWith(".") && 
                !email.Contains("..") &&
                !email.Contains(".@") &&
                !email.Contains("@.");
        }

        return (valid && isnotblank);
    }

    /// <summary>
    /// Validates the string is an Email Address or a delimited string of email addresses...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';')
    {
        var valid = true;
        var isnotblank = false;

        string[] emails = emailAddress.Split(delimiter);

        foreach (string e in emails)
        {
            var email = e.Trim();
            if (email.Length > 0 && valid) // if valid == false, no reason to continue checking
            {
                isnotblank = true;
                if (!email.IsValidEmailAddress())
                {
                    valid = false;
                }
            }
        }
        return (valid && isnotblank);
    }

    public class Regex
    {
        /// <summary>
        /// Set of Unicode Characters currently supported in the application for email, etc.
        /// </summary>
        public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French

        /// <summary>
        /// Set of Symbol Characters currently supported in the application for email, etc.
        /// Needed if a client side validator is being used.
        /// Not needed if validation is done server side.
        /// The difference is due to subtle differences in Regex engines.
        /// </summary>
        public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/\$";

        /// <summary>
        /// Regular Expression string pattern used to match an email address.
        /// The following characters will be supported anywhere in the email address:
        /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _
        /// The following symbols will be supported in the first part of the email address(before the @ symbol):
        /// !#%&'"=`{}~.-+*?^|\/$
        /// Emails cannot start or end with periods,dashes or @.
        /// Emails cannot have two @ symbols.
        /// Emails must have an @ symbol followed later by a period.
        /// Emails cannot have a period before or after the @ symbol.
        /// </summary>
        public static readonly string EmailPattern = String.Format(
            @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$",                     //  @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$",
            UnicodeCharacters,
            "{1}",
            SymbolCharacters
        );
    }

1

Aby zweryfikować swój identyfikator e-mail, możesz po prostu utworzyć taką metodę i użyć jej.

    public static bool IsValidEmail(string email)
    {
        var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
        return !String.IsNullOrEmpty(email) && r.IsMatch(email);
    }

Zwróci to wartość Prawda / Fałsz. (Ważny / nieprawidłowy identyfikator e-maila)


1

To moje ulubione podejście do tej pory:

public static class CommonExtensions
{
    public static bool IsValidEmail(this string thisEmail)
        => !string.IsNullOrWhiteSpace(thisEmail) &&
           new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail);
}

Następnie użyj utworzonego rozszerzenia łańcucha, takiego jak:

if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");

1

Daj mi znać, JEŚLI to nie działa :)

public static bool isValidEmail(this string email)
{

    string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None);

    if (mail.Length != 2)
        return false;

    //check part before ...@

    if (mail[0].Length < 1)
        return false;

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$");
    if (!regex.IsMatch(mail[0]))
        return false;

    //check part after @...

    string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None);

    if (domain.Length < 2)
        return false;

    regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$");

    foreach (string d in domain)
    {
        if (!regex.IsMatch(d))
            return false;
    }

    //get TLD
    if (domain[domain.Length - 1].Length < 2)
        return false;

    return true;

}

1

oto nasz Regex dla tej sprawy:

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

są trzy części, które są sprawdzane. ostatni jest prawdopodobnie tym, czego potrzebujesz. konkretny termin {2,6} wskazuje minimalną / maksymalną długość TLD na końcu. HTH


0

Wypróbuj następujący kod:

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");

0

WYSZUKIWANIE STRINGÓW ZA POMOCĄ METODY REGEX W C #

Jak sprawdzić poprawność wiadomości e-mail za pomocą wyrażenia regularnego?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

Użyj metody referencyjnej String.Regex ()


0

1

^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$

2)

^(([^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

0

Myślę, że twój znak karetki i znak dolara są częścią problemu. Powinieneś również trochę zmodyfikować wyrażenie regularne, używam następnego @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "


Kiedy użyjesz wyniku Przytnij (':')
ABMoharram

0

Wzór e-maila Regex:

^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$

0

Korzystałem z Regex.IsMatch ().

Przede wszystkim musisz dodać następną instrukcję:

using System.Text.RegularExpressions;

Następnie metoda wygląda następująco:

private bool EmailValidation(string pEmail)
{
                 return Regex.IsMatch(pEmail,
                 @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                 @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                 RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}

Jest to metoda prywatna z powodu mojej logiki, ale możesz umieścić metodę jako statyczną w innej warstwie, takiej jak „Narzędzia” i wywołać ją tam, gdzie potrzebujesz.


0

Nie ma idealnego wyrażenia regularnego, ale myślę, że ten jest dość silny, oparty na badaniu RFC5322 . I z interpolacją ciągów C #, myślę, że dość łatwe do naśladowania.

const string atext = @"a-zA-Z\d!#\$%&'\*\+-/=\?\^_`\{\|\}~";
var localPart = $"[{atext}]+(\\.[{atext}]+)*";
var domain = $"[{atext}]+(\\.[{atext}]+)*";
Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), 
Throws.Nothing);

Weryfikowane z NUnit 2.x.


0

Utworzyłem klasę FormValidationUtils, aby sprawdzić poprawność wiadomości e-mail:

public static class FormValidationUtils
{
    const string ValidEmailAddressPattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";

    public static bool IsEmailValid(string email)
    {
        var regex = new Regex(ValidEmailAddressPattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(email);
    }
}

0

Sprawdzanie poprawności wiadomości e-mail za pomocą wyrażenia regularnego

    string pattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";

    //check first string
   if (Regex.IsMatch(EmailId1 , pattern))
   {    
       //if email is valid
        Console.WriteLine(EmailId1+ " is a valid Email address ");
   }

Źródło: weryfikacja adresu e-mail c #

Sprawdzanie poprawności bez Regex przy użyciu konstruktora klasy MailAddress.MailAddress (String)

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}

To nie będzie pasować me@localhost. Proszę spojrzeć na te strony: Lista TLD ; ważne / nieprawidłowe adresy ; regex dla adresu e-mail RFC822
Toto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.