我在这里有一个关于RegularExpressionValidator的问题,我比较新。这是接受所有字母数字,撇号,连字符,下划线,空格,&符号,逗号,括号,句号。
我得到的答案是:
"^([a-zA-Z0-9 '-_&,()\.])+$"
这一开始似乎很好但似乎接受了其他事情'*'。
有人可以告诉我这里有什么问题吗?
答案 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是结束括号(]),. 反斜杠(),插入符号(^)和 连字符( - )。通常的元字符 是一个正常的字符 字符类,不需要 逃避反击。
使用-
转义\-
可以解决您的问题。