3

我正在使用带有非常复杂的正则表达式的 ASP 的 RegularExpressionValidator。这个已经很好用了:

(?=^.{10,}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[+#<>;.,:|\\-@*!\"§$%&/()=?`´]).*$

但是我必须扩展它以添加检查当前用户名是否是密码的一部分(不区分大小写)。

例如用户名为 Meier 用户不得创建密码

i012k34KmeIer567+

所以我将表达式更改为

(?=^.{10,}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[+#<>;.,:|\\-@*!\"§$%&/()=?`´])(?i)(?!.*meier)(?-i).*$

并将其添加到asp:RegularExpressionValidatoras 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,但是我的正则表达式在那里工作。有谁知道我该如何解决这个问题,或者谁能告诉我我做错了什么?

非常欢迎任何帮助!:) 请不要犹豫,问我是否描述得不够好。

4

1 回答 1

4

除非您设置EnableClientScript="False"禁用客户端验证,请参阅msdn,否则您的表达式将需要对 Javascript 的正则表达式引擎有效。

这就是var rx = new RegExp(val.validationexpression);导致错误的原因,您的表达无效。

Javascript 不支持内联区分大小写标志(?i)(?-i)并且您的长字符类需要修订

 [+#<>;.,:|\\@*!"§$%&/()=?`´-]

而且由于您不能仅针对 Javascript 中的密码负前瞻打开不区分大小写,因此最好单独测试密码。

于 2013-01-30T15:38:05.800 回答