为什么大于和小于符号在以下正则表达式中匹配?

时间:2011-04-27 18:21:45

标签: asp.net regex

我正在尝试限制用户可以输入文本框并使用此正则表达式的标点符号:

^[\w ,-–\[\\\^\$\.\|\?\*\+\(\)\{\}/!@#&\`\.'\n\r\f\t""’]*$

为什么>和<产生一场比赛?它们不包含在正则表达式中。 注意:这是在asp.net正则表达式验证器中使用的。

编辑:这是asp.net源代码:

<input runat="server" type="text" id="txt_FName" class="textbox" maxlength="60" />
                    <asp:RegularExpressionValidator ID="rfvRegexFName" runat="server" ControlToValidate="txt_FName" ErrorMessage="<%$ Resources:Subscribe, inputValidationError %>" />

在后面的代码中我添加了表达式:

rfvRegexFName.ValidationExpression = @"^[\w ,-–\[\\\^\$\.\|\?\*\+\(\)\{\}/!@#&\`\.'\n\r\f\t""’]*$";

3 个答案:

答案 0 :(得分:8)

  

为什么&gt;和&lt;产生一场比赛?

可能是因为-中的,-–(连字符)与[,]的字符范围相匹配。要么转义连字符,\-–,要么将连字符放在类的开头或结尾,这样会使字符串与文字-匹配。

另请注意,您无需逃避$.|?*+,{{1在字符类

中包含},(){

答案 1 :(得分:1)

编辑:看到其他答案后,看起来可能会发生一些事情。然而,主要问题是未转义的破折号。有关阅读此Q / A主题的任何人的未来参考,请参阅Bart Kiers的回答。

你不想逃避这个时期。当它在括号内时,它默认匹配常规句点,而不是像它通常那样的任何字符。我不是肯定的,但这可能会使它再次成为一个特殊角色,因此匹配任何东西。

试试这个:

^[\w ,-–\[\\\^\$.\|\?\*\+\(\)\{\}/!@#&\`'\n\r\f\t""’]*$ 

答案 2 :(得分:0)

尝试将最后一个*更改为+。您将匹配零个或多个实例,这些实例始终保证匹配。

编辑添加:所有这些字符都是常规ASCII吗?看起来您可能正在使用em-dash或其他东西,这可能与您的问题有关。

相关问题