[英]RegularExpressionValidator for TextBox
我在这里有一个RegantExpressionValidator的问题,我比较陌生。 它接受所有字母数字,撇号,连字符,下划线,空格,“&”号,逗号,括号,句号。
得到的答案是:
"^([a-zA-Z0-9 '-_&,()\.])+$"
乍一看这不错,但似乎在其他一些*之外也可以接受。
有人可以告诉我我这里有什么问题吗?
问题似乎是破折号-在字符类内部,如果不进行转义,而不是在字符类的末尾或开始时,它表示一个范围( AZ
是您自己的正则表达式的一个很好的示例)。
因此, '-_
也被解释为范围,并且ASCII 39( '
)和ASCII 95( _
)之间的字符为()*+,-./0-9:;<=>?@AZ[\\]^
。
将破折号放在最后,您应该可以:
^[a-zA-Z0-9 '_&,().-]+$
您的角色类别不太正确。 此部分: '-_
创建从撇号字符到下划线字符的范围。 在ASCII表中, *
字符介于两者之间。 您需要避开连字符:
^([a-zA-Z0-9 '\-_&,()\.])+$
或将其移动到“无关紧要”的地方,例如字符类的末尾:
^([a-zA-Z0-9 '_&,()\.-])+$
除了其他人触及到的'-_问题之外,您在错误的位置也带有+末尾。
此正则表达式中的值捕获组:
^([a-zA-Z0-9 '-_&,()\.])+$
Expresso中的字符串中的最后一个字符。
如果您想捕获正则表达式中的整个内容,则将+放在[]之后,就像
^([a-zA-Z0-9 '-_&,()\.]+)$
如果您不担心提取()内捕获的值,请放下()
^[a-zA-Z0-9 '-_&,()\.]+$
由于我也对它在最初的答案中使用了字符类这一事实感到不安,因此我挖掘了更多信息。 在http://www.regular-expressions.info/charclass.html找到了以下教程摘录
字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(),脱字符号(^)和连字符(-)。 通常的元字符是字符类中的普通字符,不需要用反斜杠转义。
摆脱-
与\\-
应该解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.