2013-11-20 42 views
1

我與ASP.NET MVC 3 C#工作,我有這樣的正則表達式:正則表達式電子郵件與2個字符後,@

@「([A-ZA-Z0-9%._-] + 「[a-zA-Z0-9 .-] +。[a-zA-Z] {2,4})+」

它適用於幾乎所有情況,除非@小於2字符。

例如: [email protected] <有效的電子郵件。
[email protected] <無效的電子郵件,但我的正則表達式不起作用。

我在論壇上找不到像這樣的東西,我對正則表達式幾乎一無所知。 有人可以幫忙嗎?謝謝。 (對不起,英文不好)。

+0

http://www.regular-expressions.info/email.html – Bas

+2

單字母域存在:http://en.wikipedia.org/wiki/Single-letter_second-level_domain – Paddy

+0

這也失敗了堆棧+溢出@ example.com' –

回答

0

由於這是C#你總是可以創建自己的屬性,使這個看起來更吸引人一些。

using System.ComponentModel.DataAnnotations; 
class EmailValidationAttribute : RegularExpressionAttribute 
{ 
    public EmailValidationAttribute() 
     : base("^[a-zA-Z0-9_\\+-]+(\\.[a-zA-Z0-9_\\+-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.([a-zA-Z]{2,4})$") { } 
} 


class EmailTest 
{ 
    [EmailValidation(ErrorMessage="Please Enter a valid email address")] 
    public String Email { get; set; } 

} 

這應該考慮到大多數情況下,你可以隨時還與羅伯特·普的回答結合起來,以獲得更好的正則表達式,但我可以看到它並沒有考慮到人寫他們的電子郵件中的大寫字母。

3

您不會在RegExp中跳過句點(。),因此它們基本上是任何字符佔位符。

電子郵件地址的域名部分(@後面)只能包含字母,數字,句點和連字符。第一個和最後一個字符以及一段時間前後的字符必須是字母或數字。 這可能因爲新的外部字符而有所改變。

+1

如果你仍然問爲什麼[email protected]失敗,解釋如下...正則表達式匹配4個最後的字符地址(即「.com」),因爲您的模式結尾處的範圍爲2-4個字符,而模式中的最後一個點與「a」匹配,因此「+」模式無法找到並且它至少需要一個字符,所以模式無法匹配。 – Les

1

http://www.regular-expressions.info/email.html

RFC 5322:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* 
    | "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] 
     | \\[\x01-\x09\x0b\x0c\x0e-\x7f])*") 
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 
    | \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3} 
     (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]: 
      (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] 
      | \\[\x01-\x09\x0b\x0c\x0e-\x7f])+) 
    \])