我搜索了很多,但无法理解为什么我的正则表达式总是返回true。
我需要验证整个字符串只包含数字,字母,空格 - 和_
我有^
和$
从开头到结尾以及+
,所以它至少有一个字符。
但是当我用#[]<>/.,
测试它时,它总是返回true。
Regex rg = new Regex(@"^[a-zA-Z0-9 -_]+$");
return rg.IsMatch(strToCheck);
答案 0 :(得分:2)
你需要转义连字符,因为它位于字符类中的那个位置。
Regex rg = new Regex(@"^[a-zA-Z0-9 \-_]+$");
注意:在字符类中,连字符具有特殊含义。您可以将其作为班级的第一个或最后一个角色。在某些正则表达式实现中,您也可以直接放在一个范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。
答案 1 :(得分:1)
因为-
符号出现在角色类的中间。中间的-
充当范围运算符。即,它允许所有属于空间范围的字符到_
。要避免-
充当范围运算符,您需要将-
符号放在字符类的第一个或最后一个位置,或者将其转义。
@"^[a-zA-Z0-9 _-]+$"
OR
@"^[-a-zA-Z0-9 _]+$