用于TextBox的RegularExpressionValidator

时间:2010-12-08 20:51:05

标签: c# asp.net regex

我在这里有一个关于RegularExpressionValidator的问题,我比较新。这是接受所有字母数字,撇号,连字符,下划线,空格,&符号,逗号,括号,句号。

我得到的答案是:

"^([a-zA-Z0-9 '-_&,()\.])+$"

这一开始似乎很好但似乎接受了其他事情'*'。

有人可以告诉我这里有什么问题吗?

4 个答案:

答案 0 :(得分:2)

问题似乎是破折号 - 在一个字符类中,如果没有转义而不是在字符类的最末端或最开头,它表示一个范围(A-Z将是你自己的一个很好的例子正则表达式)。

因此'-_也被解释为范围,ASCII 39(')和ASCII 95(_)之间的字符为()*+,-./0-9:;<=>?@A-Z[\]^

把破折号放在最后,你应该没问题:

^[a-zA-Z0-9 '_&,().-]+$

答案 1 :(得分:1)

你的角色类不太正确。这部分:'-_创建一个从撇号字符到下划线字符的范围。在ASCII表中,*字符介于两者之间。你需要逃脱连字符:

^([a-zA-Z0-9 '\-_&,()\.])+$

或者将它移动到“无关紧要”的地方,例如角色类的结尾:

^([a-zA-Z0-9 '_&,()\.-])+$

答案 2 :(得分:1)

除了其他人触及的'-_问题之外,你还会在错误的地方找到+。

此正则表达式中的值捕获组:

^([a-zA-Z0-9 '-_&,()\.])+$
Expresso中的

是字符串中的最后一个字符。

如果你想捕获正则表达式中的整个内容,那么将+之后的+直接放在

之后
^([a-zA-Z0-9 '-_&,()\.]+)$

如果您不想提取()中捕获的值,则删除()

^[a-zA-Z0-9 '-_&,()\.]+$

答案 3 :(得分:0)

由于我在最初的答案中使用了一个字符类这一事实,我也蹦了起来,我挖了更多信息。在http://www.regular-expressions.info/charclass.html

找到以下教程摘录
  

唯一的特殊字符或   角色里面的元字符   class是结束括号(]),.   反斜杠(),插入符号(^)和   连字符( - )。通常的元字符   是一个正常的字符   字符类,不需要   逃避反击。

使用-转义\-可以解决您的问题。