2011-01-26 97 views
4

我想用C#中的正則表達式驗證電子郵件地址。不區分大小寫的正則表達式

我使用這個模式:

^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

此模式的匹配大寫字母。例如:

[email protected]」 - >返回false。 「[email protected]」 - >返回true。

我明顯希望第一個例子也會返回true。我不想使用RegexOptions.IgnoreCase標誌。

我想改變模式本身以匹配第一個例子。我認爲我可以在模式結尾添加一個「/ i」或類似的東西,但似乎並不奏效。 我不喜歡在開始時使用「?i」。

我該如何做到這一點?

(如果你能爲我改寫整個模式,那就太好了!)。

謝謝。

+4

如何PCRE的`i`修改任何比.NET的`RegexOptions.IgnoreCase`更好?是否因爲輸入少了22個字符? – BoltClock 2011-01-26 08:49:42

+0

要小心。在[]塊中,如果您不想匹配任何字符,則使用\ – 2011-01-26 08:57:39

回答

14

不僅僅是[A-Z],而是使用[A-Za-z]。

但要小心:電子郵件地址以.travel等頂級域名結尾,根據您的正則表達式禁止!

10

你可以使用:^(?i)[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$

通知之(?i)這臺RegexOptions.IgnoreCase,這樣你不會修改任何字符類的正則表達式或修改其中所使用的代碼。

例(在F#互動):

Regex.Match("[email protected]", @"^(?i)[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$");; 
val it : Match = [email protected] {Captures = seq [...]; 
           Groups = seq [...]; 
           Index = 0; 
           Length = 13; 
           Success = true; 
           Value = "[email protected]";} 
相關問題