ASP.NET WebForms自定义正则验证异常问题求助
解决ASP.NET RegularExpressionValidator误触发问题
核心问题分析
你当前的验证逻辑搞反了:RegularExpressionValidator默认规则是输入匹配正则表达式时验证通过,如果你的正则是直接匹配有害字符,那么当输入无有害字符时,因不匹配正则会触发验证错误,这就是误触发的原因。
正确的正则表达式方案
需要编写一个排除所有有害字符/序列的正则,确保输入不包含>, <, /*, */, --, |, {}时验证通过,反之触发提示。正则表达式如下:
^((?!<|>|/\*|\*/|--|\||\{|\}).)*$
正则说明:
^和$限定匹配整个输入字符串(?!...)负向预查,确保后续内容不包含指定的有害项- 转义特殊正则字符:
*、|、{、}需要用\转义;/*和*/作为整体序列匹配 ((?!...).)*允许任意字符(包括空输入),只要不触发有害项的预查
修正后的控件代码
<asp:TextBox ID="txt_comment" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="rev_comment" runat="server" ControlToValidate="txt_comment" ErrorMessage="请移除以下有害字符:>, <, /*, */, --, |, {}" ValidationExpression="^((?!<|>|/\*|\*/|--|\||\{|\}).)*$" Display="Dynamic"> </asp:RegularExpressionValidator> <asp:Button ID="btn_submit" runat="server" Text="提交" />
额外注意事项
- 如果不允许空输入,将正则中的
*改为+,即^((?!<|>|/\*|\*/|--|\||\{|\}).)+$ - 确保控件的
ControlToValidate属性正确指向txt_comment,且无拼写错误 - 测试时需覆盖所有场景:正常文本、含单个有害字符、含有害序列(如
/*)
内容的提问来源于stack exchange,提问作者A.Mac
相关产品推荐
相关产品推荐

