正则表达式。检查字符串在这些字符中始终为true

时间:2014-12-10 16:47:50

标签: c# regex pattern-matching

我搜索了很多,但无法理解为什么我的正则表达式总是返回true。

我需要验证整个字符串只包含数字,字母,空格 - 和_

我有^$从开头到结尾以及+,所以它至少有一个字符。

但是当我用#[]<>/.,测试它时,它总是返回true。

Regex rg = new Regex(@"^[a-zA-Z0-9 -_]+$");
    return rg.IsMatch(strToCheck);

2 个答案:

答案 0 :(得分:2)

你需要转义连字符,因为它位于字符类中的那个位置。

Regex rg = new Regex(@"^[a-zA-Z0-9 \-_]+$");

注意:在字符类中,连字符具有特殊含义。您可以将其作为班级的第一个或最后一个角色。在某些正则表达式实现中,您也可以直接放在一个范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。

答案 1 :(得分:1)

因为-符号出现在角色类的中间。中间的-充当范围运算符。即,它允许所有属于空间范围的字符到_。要避免-充当范围运算符,您需要将-符号放在字符类的第一个或最后一个位置,或者将其转义。

@"^[a-zA-Z0-9 _-]+$"

OR

@"^[-a-zA-Z0-9 _]+$