繁体   English   中英

TextBox的RegularExpressionValidator

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM