2

这个正则表达式:

^[a-zA-Z0-9 -.,()/\n/\r]+$  

在 .NET 中总是匹配

"#" 或 "$" 或 "!" 或“%”或“&”或“*”或“+”

所以要清楚,这一行:

Regex.IsMatch("!", @"^[a-zA-Z0-9 -.,()/\n/\r]+$");

返回真。为什么会这样?

4

2 回答 2

10

-在字符类中使用时描述一个范围

所以你正在尝试匹配space直到的字符.

移动-到字符类的结尾或开头或转义它\-

现在参考ascii 表,您正在指定从 ascii 十进制值 32 到 46 的范围,其中包括!, ", #, $, %........


所以,应该是

^[-a-zA-Z0-9 .,()/\n/\r]+$ 
  ^

或者

^[a-zA-Z0-9 .,()/\n/\r-]+$   
                      ^

或逃脱它

^[a-zA-Z0-9 \-.,()/\n/\r]+$   
             ^
于 2013-07-02T14:29:17.353 回答
2

字符类中的连字符需要在第一个或最后一个位置,否则需要转义。它应该工作:

^[a-zA-Z0-9 .,()/\n/\r-]+$ 

或者:

^[-a-zA-Z0-9 .,()/\n/\r]+$ 

或者:

^[a-zA-Z0-9 \-.,()/\n/\r]+$ 
于 2013-07-02T14:30:47.667 回答