这个正则表达式:
^[a-zA-Z0-9 -.,()/\n/\r]+$
.NET中的始终匹配
“#”或“$”或“!”或“%”或“&”或“*”或“+”
所以要清楚,这一行:
Regex.IsMatch("!", @"^[a-zA-Z0-9 -.,()/\n/\r]+$");
返回true。为什么会这样?
答案 0 :(得分:10)
-
在字符类中使用时会描绘范围
因此,您要尝试匹配space
到.
将-
移至字符类的结尾或开头,或将其\-
现在提到ascii table,您指定的范围从ascii十进制值32到46,其中包括!
,"
,#
,$
,{ {1}} ........
所以,它应该是
%
或
^[-a-zA-Z0-9 .,()/\n/\r]+$
^
或逃避它
^[a-zA-Z0-9 .,()/\n/\r-]+$
^
答案 1 :(得分:2)
字符类中的连字符需要在第一个位置或最后位置,否则需要进行转义。它应该工作:
^[a-zA-Z0-9 .,()/\n/\r-]+$
或者:
^[-a-zA-Z0-9 .,()/\n/\r]+$
或者:
^[a-zA-Z0-9 \-.,()/\n/\r]+$