【发布时间】:2009-12-01 06:43:15
【问题描述】:
我有以下正则表达式验证器来检测输入字符串是否包含 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 错误。 但是,当我采用相同的正则表达式并使用 System.Text.RegularExpressions 中的 Regex 类运行它时,一切正常: 像这样:
Regex r = new Regex(">(?:(?<t>[^<]*))");
r.IsMatch(@"<b>This should cause a validation error</b>");
r.IsMatch("this is fine");
我错过了什么
更新: 错误似乎发生在 WebResource.axd 中的以下 js 函数中:
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]);
}
【问题讨论】:
-
运行您的代码没有问题,您使用的是哪个浏览器?
-
FF 3.5 和 IE 8。默认浏览器设置为 IE 并且项目在调试模式下运行时抛出脚本错误。
-
我认为这是因为在客户端 Regex 将在 JavaScript 中实现,因此 Regex 应该符合 JavaScript Regex Flavour。 JavaScript 不支持命名捕获,因此正则表达式应简化为 >(?:([^
-
@Huppie:是的。但是
>(?:([^<]*))似乎也不起作用。你测试过吗? -
EnableClientScript="true" 是默认值。