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.