不区分大小写的正则表达式

10

我希望能在C#中使用正则表达式验证电子邮件地址。

我正在使用以下模式:

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

这个模式只匹配大写字母。例如:

"example@gmail.com" --> 返回false。 "EXAMPLE@GMAIL.COM" --> 返回true。

我希望第一个例子也返回true。

注意:我不想使用RegexOptions.IgnoreCase标志。

我想改变模式本身以匹配第一个示例。我认为我可以在模式的结尾添加"/i"或类似的东西,但似乎不起作用。 我更喜欢不要在开头使用"?i"。

我该如何实现这一点?

(如果您能重新编写整个模式,那就太好了!)。

谢谢。


4
PCREçڑ„iن؟®é¥°ç¬¦ç›¸و¯”.NETçڑ„RegexOptions.IgnoreCaseوœ‰ه“ھن؛›ن¼ک点ï¼ںوک¯ه› ن¸؛è¦پو‰“çڑ„ه­—符و•°ه‡ڈه°‘ن؛†22ن¸ھهگ—ï¼ں - BoltClock
在[]块中小心处理点号,如果你不想匹配任何字符,请使用\进行转义。 - Johann Blais
1
@Johann 在 [] 块内(至少在 .NET 正则表达式语法中),字符不需要转义。 - Dave D
1
请注意,顶级域名可能超过4个字符,例如travelmuseum - Toto
3个回答

23

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

但要注意:您的正则表达式会禁止以.travel等顶级域名结尾的电子邮件地址!


19
дҪ еҸҜд»ҘзӣҙжҺҘдҪҝз”Ё: ^(?i)[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$ жіЁж„Ҹ(?i)дјҡи®ҫзҪ®RegexOptions.IgnoreCaseпјҢиҝҷж ·дҪ е°ұдёҚеҝ…дҝ®ж”№жӯЈеҲҷиЎЁиҫҫејҸдёӯзҡ„д»»дҪ•еӯ—з¬Ұзұ»жҲ–дҝ®ж”№д»Јз Ғзҡ„дҪҝз”ЁдҪҚзҪ®гҖӮ
дҫӢеҰӮпјҲеңЁF#дәӨдә’зҺҜеўғдёӯпјүпјҡ
Regex.Match("test@test.com", @"^(?i)[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$");;
val it : Match = test@test.com {Captures = seq [...];
                              Groups = seq [...];
                              Index = 0;
                              Length = 13;
                              Success = true;
                              Value = "test@test.com";} 

我喜欢它 - 使用i修改器来设置.ignoreCase比在代码中设置.ignoreCase要好得多。使用i意味着如果您的正则表达式存储在设置文件或数据库中,您可以轻松更改它。 - edhubbell

6

好的,这个可以实现。

^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接