关于c#:TextBox的RegularExpressionValidator

RegularExpressionValidator for TextBox

我有一个关于正则表达式验证器的问题,我对它比较陌生。它接受所有字母数字、撇号、连字符、下划线、空格、和号、逗号、括号和句号。

我得到的答案是:

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

起初这似乎很好,但它似乎接受了其他一些事情。

有人能告诉我这里出了什么问题吗?


问题似乎是字符类中的破折号,如果不是在字符类的最末尾或最开头,它表示一个范围(A-Z是来自您自己的regex的一个很好的例子)。

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

把破折号放在最后,你就应该没事了:

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

除了其他人接触到的‘-’问题,你还把+放在了错误的地方。

此regex中的值捕获组:

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

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

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

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

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

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


你的性格分类不太正确。这部分:'-_创建了从撇号字符到下划线字符的范围。在ASCII表中,*字符介于两者之间。您需要避开连字符:

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

或者把它移到"无关紧要"的地方,例如字符类的结尾:

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

由于在我最初的答案中使用了一个字符类,我也被这个事实绊倒了,所以我四处寻找更多的信息。在http://www.regular-expressions.info/charclass.html上找到以下教程摘录

The only special characters or
metacharacters inside a character
class are the closing bracket (]), the
backslash (), the caret (^) and the
hyphen (-). The usual metacharacters
are normal characters inside a
character class, and do not need to be
escaped by a backslash.

\-逃出-应该可以解决你的问题。