这个正则表达式:
^[a-zA-Z0-9 -.,()/\n/\r]+$
在 .NET 中总是匹配
"#" 或 "$" 或 "!" 或“%”或“&”或“*”或“+”
所以要清楚,这一行:
Regex.IsMatch("!", @"^[a-zA-Z0-9 -.,()/\n/\r]+$");
返回真。为什么会这样?
-
在字符类中使用时描述一个范围
所以你正在尝试匹配space
直到的字符.
移动-
到字符类的结尾或开头或转义它\-
现在参考ascii 表,您正在指定从 ascii 十进制值 32 到 46 的范围,其中包括!
, "
, #
, $
, %
........
所以,应该是
^[-a-zA-Z0-9 .,()/\n/\r]+$
^
或者
^[a-zA-Z0-9 .,()/\n/\r-]+$
^
或逃脱它
^[a-zA-Z0-9 \-.,()/\n/\r]+$
^
字符类中的连字符需要在第一个或最后一个位置,否则需要转义。它应该工作:
^[a-zA-Z0-9 .,()/\n/\r-]+$
或者:
^[-a-zA-Z0-9 .,()/\n/\r]+$
或者:
^[a-zA-Z0-9 \-.,()/\n/\r]+$