asp.net正则表达式验证器客户端脚本错误
我有以下正则表达式验证器来检测输入字符串是否包含
HTML /脚本标记,如果是这样,则会导致更改错误:
<asp:TextBox ID="txt" runat="server" /> <asp:RegularExpressionValidator ControlToValidate="txt" runat="server" ID="regexVal" EnableClientScript="true" Display="Dynamic" ErrorMessage="Invalid Content" Text="!" ValidationExpression=">(?:(?<t>[^<]*))" /> 当我运行托管此标记的页面时,我收到一条scipt错误消息“正则表达式中的语法错误”. Regex r = new Regex(">(?:(?<t>[^<]*))"); r.IsMatch(@"<b>This should cause a validation error</b>"); r.IsMatch("this is fine"); 我错过了什么 更新: function RegularExpressionValidatorEvaluateIsValid(val) { var value = ValidatorGetValue(val.controltovalidate); if (ValidatorTrim(value).length == 0) return true; var rx = new RegExp(val.validationexpression); //this is the line causing the error var matches = rx.exec(value); return (matches != null && value == matches[0]); } 解决方法
我认为问题是JavaScript不理解.NET的分组正则表达式语法.
在RegularExpressionValidator上将EnableClientScript设置为true时,ASP.NET会在JavaScript中重新创建正则表达式,以便对您的控件启用客户端验证.在这种情况下,JavaScript不支持命名组(?< t> …)和非捕获组(?:…)的语法.虽然这些功能在.NET中运行,但JavaScript正在努力解决它们. 从RegularExpressionValidator Control (General Reference) on MSDN开始:
有两种方法可以解决这个问题: >禁用客户端脚本生成并在服务器端使用正则表达式execue.您可以通过将EnableClientScript设置为false来执行此操作. 我想指出其他几个问题: >如果你想要做的就是检查是否存在开口尖括号,你原来的正则表达式似乎根本不需要捕获.它可以重写为> [^<] *,它将更简单并且工作方式完全相同.它不会捕获原始字符串中的任何值,但由于您在ASP.NET验证控件中使用它,因此这无关紧要.>实现RegularExpressionValidator的方式仅在匹配成功时才有效.在您的情况下,如果您的文本框包含类似> blah的内容,则验证将通过.我想你想让它以相反的方式工作.>如果将正则表达式修改为> [^<] *,则正则表达式仍然无法正常工作.验证控件尝试匹配文本框中的所有文本.因此,如果我在文本框中输入> blah,它将匹配,但< b> blah< / b>不会因为正则表达式说字符串必须以>开头.我建议尝试类似.*>.* [^<] *以允许在>之前的文字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将Angular与MVC 5捆绑在一起后出现格式错误
- asp.net – 是否可以使用具有强类型资源的LabelFor,Validat
- asp.net-mvc – ASP.NET MVC是否可以从数据库中提取的模板中
- asp.net-mvc – 当Bundling EnableOptimizations为true时,F
- asp.net – 要解决的JavaScript难题:window.confirm = div
- 如何解决jQuery Validation针对动态添加的表单无法工作的问
- asp.net-mvc – 为什么不在View中使用Linq
- asp.net-mvc – 从asp.net POST动作方法更新nhibernate实体
- asp.net – 覆盖webapi odata链接的主机
- asp.net – INSERT存储过程不起作用?
- asp.net – 如何在主页面中包含CSS?
- asp.net-mvc – 在DropDownList中验证所需的选择
- asp.net – 什么是SNIReadSyncOverAsync,为什么需
- asp.net-mvc – ASP.Net 5中缺少FormCollections
- asp.net – 如何手动停止kestrel服务器
- asp.net – 为会话设置文化
- asp.net-mvc – 自定义验证属性不在客户端上工作
- asp.net-mvc-3 – MVC默认重定向错误页面并不总是
- asp.net-mvc – asp.net MVC:禁用一个TextBox
- 如何将当前的asp.net usercontrols类名转换为c#上