簡體   English   中英

C#中電子郵件驗證的最佳正則表達式

[英]Best Regular Expression for Email Validation in C#

我已經看到了許多針對不同編程語言的正則表達式,它們都旨在驗證電子郵件地址。 我已經看到很多評論說,有關的表達在某些情況下不起作用,或者太嚴格或太寬容。 我正在尋找的是可以在我的C#代碼中使用的正則表達式。

我發現最好的是

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

有更好的東西嗎?

電子郵件地址:RFC 2822格式
與正常的電子郵件地址匹配。 不檢查頂級域。
要求“不區分大小寫”選項為開。

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

用法:

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

第一種選擇(由於丟球而不好,但MS會為您效勞):

bool IsValidEmail(string email)
{
    try {
        var mail = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch {
        return false;
    }
}

閱讀第二個選項, 直到我閱讀RFCRFC規范, 我才知道如何驗證電子郵件地址

此C#函數使用正則表達式來評估所傳遞的電子郵件地址在語法上是否有效。

public static bool isValidEmail(string inputEmail)
{
   string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
         @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
         @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
   Regex re = new Regex(strRegex);
   if (re.IsMatch(inputEmail))
    return (true);
   else
    return (false);
}

更新了2019年的答案。

正則表達式對象對於匹配函數是線程安全的。 知道這一點並且存在一些性能選擇或文化/語言問題,我提出了這種簡單的解決方案。

public static Regex _regex = new 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,4}|[0-9]{1,3})(\]?)$",
    RegexOptions.CultureInvariant | RegexOptions.Singleline);

public static bool IsValidEmailFormat(string emailInput)
{
    return _regex.IsMatch(emailInput);
}

正則表達式的替代配置:

public static Regex _regex = new 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,4}|[0-9]{1,3})(\]?)$",
    RegexOptions.CultureInvariant | RegexOptions.Compiled);

我發現編譯僅在大字符串匹配時才更快,例如書籍解析。 只需讓Regex解釋,簡單的電子郵件匹配就會更快。

線程安全和正則表達式
正則表達式最佳實踐

我想建議new EmailAddressAttribute().IsValid(emailTxt)用於使用RegEx驗證之前/之后的其他驗證

請記住, EmailAddressAttributeSystem.ComponentModel.DataAnnotations namespace一部分。

電子郵件驗證正則表達式

^[a-z0-9][-a-z0-9._]+@([-a-z0-9]+.)+[a-z]{2,5}$

要么

^[a-z0-9][-a-z0-9._]+@([-a-z0-9]+[.])+[a-z]{2,5}$

演示鏈接:

https://regex101.com/r/kN4nJ0/53

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM