我正在使用ASP的RegularExpressionValidator,它具有非常复杂的正则表达式。这个很好用:
(?=^.{10,}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[+#<>;.,:|\\-@*!\"§$%&/()=?`´]).*$
但我必须扩展它以添加检查,如果当前用户名是密码的一部分(不区分大小写)。
例如,用户名为Meier,不允许用户创建密码
i012k34KmeIer567 +
所以我把表达式改为
(?=^.{10,}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[+#<>;.,:|\\-@*!\"§$%&/()=?`´])(?i)(?!.*meier)(?-i).*$
并将其添加到asp:RegularExpressionValidator
ValidationExpression
。
不幸的是,这样做时,我在添加密码时在浏览器中出错:
"SyntaxError: invalid quantifier"
浏览器显示的有问题的代码是:
function RegularExpressionValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
**var rx = new RegExp(val.validationexpression);**
var matches = rx.exec(value);
return (matches != null && value == matches[0]);
}
"**"
行是有问题的。
我也尝试了RegEx.IsMatch
,但我的正则表达式有效。有没有人知道如何解决这个问题,或者任何人都可以告诉我我做错了什么?
非常欢迎任何帮助! :)请不要犹豫,问我是否描述得不够好。
答案 0 :(得分:4)
除非您将EnableClientScript="False"
设置为禁用客户端验证,否则请参阅msdn,您的表达式需要对Javascript的正则表达式引擎有效。
这就是为什么var rx = new RegExp(val.validationexpression);
导致错误,你的表达无效。
Javascript不支持内联区分大小写标志(?i)
和(?-i)
,并且您的长字符类需要修订
[+#<>;.,:|\\@*!"§$%&/()=?`´-]
由于您无法仅针对Javascript中的密码否定预测启用不区分大小写,因此最好单独测试密码。