asp.net RegularExpressionValidator和复杂的正则表达式(区分大小写的开关)

时间:2013-01-30 12:50:30

标签: c# asp.net regex validation

我正在使用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,但我的正则表达式有效。有没有人知道如何解决这个问题,或者任何人都可以告诉我我做错了什么?

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

1 个答案:

答案 0 :(得分:4)

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

这就是为什么var rx = new RegExp(val.validationexpression);导致错误,你的表达无效。

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

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

由于您无法仅针对Javascript中的密码否定预测启用不区分大小写,因此最好单独测试密码。