RegularExpressionValidator for TextBox
我有一个关于正则表达式验证器的问题,我对它比较陌生。它接受所有字母数字、撇号、连字符、下划线、空格、和号、逗号、括号和句号。
我得到的答案是:
1 | "^([a-zA-Z0-9 '-_&,()\.])+$" |
起初这似乎很好,但它似乎接受了其他一些事情。
有人能告诉我这里出了什么问题吗?
问题似乎是字符类中的破折号,如果不是在字符类的最末尾或最开头,它表示一个范围(
因此,
把破折号放在最后,你就应该没事了:
1 | ^[a-zA-Z0-9 '_&,().-]+$ |
除了其他人接触到的‘-’问题,你还把+放在了错误的地方。
此regex中的值捕获组:
1 | ^([a-zA-Z0-9 '-_&,()\.])+$ |
expresso是字符串中的最后一个字符。
如果你想在正则表达式中捕获整个内容,那么将+直接放在
1 | ^([a-zA-Z0-9 '-_&,()\.]+)$ |
如果您不想提取()中捕获的值,请删除()。
1 | ^[a-zA-Z0-9 '-_&,()\.]+$ |
你的性格分类不太正确。这部分:
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.
用