2011-01-26 93 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]";} 
相关问题