Normal İfade E-posta doğrulaması


216

Bunu kullanıyorum

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

e-postayı doğrulamak için regexp

([\w\.\-]+)- bu birinci düzey alan adı içindir (birçok harf ve sayı, ayrıca nokta ve kısa çizgi)

([\w\-]+)- bu ikinci düzey alan adı içindir

((\.(\w){2,3})+)- ve bu bir nokta ve 2 veya 3 içeren diğer düzey alan adları (3'ten sonsuza kadar) içindir değişmezleri

Bu normal ifadenin nesi var?

DÜZENLE: "bir şey@someth.ing" e-postasıyla eşleşmiyor


1
RFC 5321 ve 5322 tarafından belirtildiği gibi geçerli karakterleri dahil etmemeniz dışında - hiçbir şey.
Brad Christie


Bence sen yanlış bir şey sabitleme yardımcı olabilir burada o zaman başkalarını yanlış ve bize ne anlatmak zorunda.
Uwe Keim

10
Bir sorununuz var -> 'regex' düşünüyorsunuz -> şimdi 2 probleminiz var ;-)
Jakub Konecki

1
Normal ifadeniz hakkında bir yorum. Bu yeni .amsterdam, .info ve diğer alan adlarıyla normal ifade şöyle olmalıdır:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Yanıtlar:


372

TLD'ler .museum gibi bu şekilde eşleşmiyor ve birkaç TLD daha var. Ayrıca, kullandığınız e-posta adreslerini doğrulamak MailAddress sınıfını Microsoft açıkladığı gibi burada bir not:

Bir e-posta adresini doğrulamak için normal bir ifade kullanmak yerine System.Net.Mail.MailAddress sınıfını kullanabilirsiniz. Bir e-posta adresinin geçerli olup olmadığını belirlemek için, e-posta adresini MailAddress.MailAddress (String) sınıf yapıcısına iletin.

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

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

Bu size çok fazla baş ağrısı kazandırır çünkü regex yazmak (veya başka birinin anlamaya çalışmak) gerekmez.


63
Bu, çift noktaları ".." ne de satır içi boşlukları "yakalayamadı." Bunun yerine normal
ifadeyle

33
Buna rağmen popüler bir cevap. Doğru değil, en az iki geçersiz biçimi yakalayamıyorum: "Abc. @ Example.com", "Abc..123 @ example.com"
sean717

12
@ sean717: RFC ve / veya bağlantıya bakın . Örneklerinizin muhtemelen gerçek dünyada işe yaramayacağını kabul ediyorum, ancak bu onları geçersiz kılmaz.
Dan Pichelman

13
Çalışıp çalışmadığını, girişi doğrulamak için try catch'i kullanmanız tavsiye edilmez. Regex kesinlikle gitmek için daha iyi bir yoldur.
mrt

159
-1 Bozuk kod parçası. İstisnaları yakalamak, alanları doğrulamanın yolu değildir.
ken2k

99

Bence @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"çalışmalı.
Şöyle yazmalısın

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");

Bunun şu durumlarda başarısız olacağı konusunda uyarınız:

  1. @Sembolün ardından bir alt alan adı var .

  2. 3'ten büyük uzunlukta bir TLD kullanırsınız. .info


2
Test@-online.com adresini geçerli olarak döndürür. Geçersiz olmalıdır.
Mathias F

7
Şimdi 3'ten fazla karaktere sahip TLD'lere sahip olabileceğiniz için, bu yeni çıkan TLD'lerde başarısız olacağına inanıyorum.
AaronLS

Bu normal ifade "somename@gmail.com.in.in.in.in" ifadesinin geçerli olmasına izin verir.
Merak

14
gmail.com.in.in.in.in tamamen geçerli bir alan adı, bu yüzden neden izin verilmemesi gerektiğini göremiyorum?
larsw

@Larsw ile normal ifade kullanılmamalıdır
Boris Sokolov

68

Kullandığım e-posta adreslerini kontrol etmek için bir ifadem var.

Yukarıdakilerin hiçbiri benimki kadar kısa veya doğru olmadığından, buraya göndereceğimi düşündüm.

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

Daha fazla bilgi için buradan okuyun: C # - E-posta Düzenli İfade

Ayrıca, bu, e-postanın gerçekten var olup olmadığını değil, e-posta sözdizimine dayalı RFC geçerliliğini denetler. Bir e-postanın gerçekten var olup olmadığını test etmenin tek yolu, göndermek ve e-posta göndermek ve kullanıcının bir bağlantıyı tıklayarak veya bir jeton girerek e-postayı aldığını doğrulamasını sağlamaktır.

Sonra Mailinator.com ve benzeri gibi atma alanları var. Bu, bir e-postanın kalıcı etki alanından olup olmadığını doğrulamak için hiçbir şey yapmaz.


Aradığım bu - thanx! İki nokta ".." ve beyaz boşluklar "alır."
Benny Skogberg

5
Ben birim testleri için benim düzenli ifade projesini güncellenmiş ve hatta hata bir çift sabit: C # - E-posta Normal İfade rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous

Yeni TLD'lerle, üçüncü satırdaki [a-zA-Z] {2,4} yerine bir {0} değiştirmeli ve sonra pipeSeparatedAllowedTlds tarafından oluşturulacak bir string.format (pattern, pipeSeparatedAllowedTlds) yapmalıyız bu dosya üzerinden yineleme: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous

12
Parth. E-postanızla hangi RFC kuralının ihlal edildiğini söyleyebilir misiniz? Çünkü tahmin et ne oldu. RFC göre, geçerlidir !!!! URL'sini in. Adresinde satın aldıysanız, bu e-posta adresini oluşturabilirsiniz. Anlama?
Rhyous

2
Aslında, buradaki github'ımda zaten güncellediğim gibi görünüyor: github.com/rhyous/EmailRegEx . Ancak, \ w alt çizgi içerebilir, bu yüzden doğruluk için düzenlemek zorunda kalabilirsiniz.
Rhyous

36

Bunun için MSDN'de güzel bir belge buldum.

Nasıl yapılır: Dizelerin Geçerli E-posta Biçiminde Olduğunu Doğrulama http://msdn.microsoft.com/en-us/library/01escwtf.aspx (bu kodun Internet etki alanı adları için ASCII olmayan karakterlerin kullanımını desteklediğini de kontrol edin. )

.Net 2.0 / 3.0 ve .Net 3.5 ve üstü için 2 uygulama vardır.
2.0 / 3.0 sürümü:

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})(\]?)$"); 
}

Bu yöntem üzerindeki testlerim şunları veriyor:

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
Eşleşmiyor[me]@whatever.museum
Toto

Geçersiz: Abc.example.com EVET, düzgün çalışıyor, ancak bu "toms.email. @ Gmail.com"; çalışmıyor
Tom Stickel

1
Artı işareti eklemek zorunda kaldım: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \) |. (. ([\ w -] + \) +)) ([a-za-z] {2,4} | [0-9], {1, 3}) (]?) $ "` 11 Google ve hotmail takma adı üzerinde kalan karakter @ işaretinden önce ilk bölümde artı oturum açmaya izin verir.
Henk J Meulekamp

Bu yukarıdakiyle aynıdır. geçerli bir e-posta adresi olarak "somename@gmail.com.in.in.in" izin veriyor ... !!
Merak

9
@ParthTrivedi Neden somename@gmail.com.in.in.ingeçerli bir e-posta adresi olmadığı konusunda ısrar ediyorsunuz ?
Ivaylo Slavov

15

Aşağıdaki kod, Microsoft'un github üzerindeki Veri ek açıklamaları uygulamasına dayanmaktadır ve bunun e-postalar için en eksiksiz doğrulama olduğunu düşünüyorum:

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
Bunu profesyonel bir kaynaktan elde etmek güzel (elbette diğerlerine karşı hiçbir şey); takdir.
Nicholas Petersen

1
RFC 5321 ve 5322'yi doğruladığı için bu en iyi normal ifade olmalıdır. Bazı birim testlerini kaçırıyor.
ToXinE

E-posta adresinin sonundaki noktayı yakalamaz.
Sellorio

12

Bu, RFC 5321 ve 5322'nin tüm gereksinimlerini karşılamaz, ancak aşağıdaki tanımlarla çalışır.

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

Kod aşağıda

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
bu ifade geçerli adreslerle eşleşmiyor !#$%&'*+-/=?^_. {|} ~ @ example.com` ya da buDörte@Sörensen.example.com
TS

7

En iyi e-posta doğrulama normal ifadesi

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

Ve kullanımı: -

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

Boyut için bunu deneyin:

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

Bunu dene, benim için çalışıyor:

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

Bu normal ifade mükemmel çalışıyor:

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

Bu, yorumlarda başkaları tarafından belirtilen geçersiz e-postaları önler:

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

Ayrıca çift noktalı e-postaları önler:

hello..world@example..com

Bulabildiğiniz kadar geçersiz e-posta adresiyle test etmeyi deneyin.

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}$).*");
}

Bkz . C # 'da normal ifadeyi kullanarak e-posta adresini doğrulama .


Bu, tüm geçersiz e-posta adreslerim için yanlış döndürür. Maalesef, birçok geçerli e-posta adresi için de false değerini döndürür.
Mark

4

EF6 özellik tabanlı e-posta doğrulamasını neden kullanmıyorsunuz?

Yukarıda görebileceğiniz gibi, e-posta için Regex doğrulamasında her zaman bir delik vardır. EF6 veri ek açıklamaları kullanıyorsanız, bunun için mevcut olan EmailAddress veri ek açıklama özniteliğiyle kolayca güvenilir ve daha güçlü e-posta doğrulaması elde edebilirsiniz . E-posta giriş alanında mobil cihaza özel regex hatası aldığımda daha önce kullandığım normal ifade doğrulamasını kaldırmak zorunda kaldım. E-posta doğrulaması için kullanılan veri notu özniteliği mobil cihazdaki sorun çözüldü.

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+)*");
}

E-posta adresini doğrulamak için yukarıdaki kodu kullanıyorum.


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);
    }

Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı ile ilgili ek bağlam sağlamak uzun vadeli değerini artırır
AStopher

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

1

Dünya çapında neredeyse tüm e-posta gereksinimlerini karşılayan bir e-posta doğrulayıcı oluşturmak için birçok girişimde bulunuldu.

Arayabileceğiniz uzantı yöntemi:

myEmailString.IsValidEmailAddress();

Regex desen dizgisini arayarak alabilirsiniz:

var myPattern = Regex.EmailPattern;

Kurallar (çoğunlukla yorumlar):

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

E-posta kimliğinizi doğrulamak için böyle bir yöntem oluşturabilir ve kullanabilirsiniz.

    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);
    }

Bu True / False değerini döndürür. (Geçerli / Geçersiz E-posta Kimliği)


1

Şimdiye kadar bu benim en sevdiğim yaklaşım:

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

Ardından, oluşturulan dize uzantısını aşağıdaki gibi kullanın:

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

1

Sadece bana bildirin EĞER bu işi yapmaz :)

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

İşte bu dava için Regex:

@"^([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})(\]?)$",

checcked üç bölüm vardır. sonuncusu muhtemelen ihtiyacınız olanıdır. {2,6} terimi , sonunda TLD'nin min / maks uzunluğunu belirtir. HTH


0

Aşağıdaki Kodu Deneyin:

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

C # REGEX YÖNTEMİ İLE STRING ARAMA

Bir E-postayı Düzenli İfade ile nasıl doğrulayabilirim?

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);
}

Reference String.Regex () Yöntemini Kullan


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

Regex E-posta Deseni:

^(?:[\\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

Regex.IsMatch () kullanıyorum.

Her şeyden önce bir sonraki ifadeyi eklemeniz gerekir:

using System.Text.RegularExpressions;

Sonra yöntem şöyle görünür:

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));
}

Bu benim mantığım nedeniyle özel bir yöntem ama yöntemi "Utilities" gibi başka bir Katman statik olarak koymak ve istediğiniz yerden çağırabilirsiniz.


0

Mükemmel düzenli bir ifade yok, ancak bu, RFC5322'nin çalışmasına dayanarak oldukça güçlü . Ve C # string interpolation ile, takip etmek oldukça kolay, sanırım.

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);

İle incelendi NUnit 2.x.


0

E-postayı doğrulamak için bir FormValidationUtils sınıfı oluşturdum:

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

Normal ifade kullanarak e-posta doğrulaması

    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 ");
   }

Kaynak: e-posta doğrulama c #

MailAddress.MailAddress (String) sınıf yapıcısını kullanarak Regex Olmadan Doğrulama

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

Bu eşleşmeyecek me@localhost. Lütfen şu sitelere bir göz atın: TLD listesi ; geçerli / geçersiz adresler ; RFC822 e-posta adresi için regex
Toto
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.