ASP.NET RegularExpressionValidator和复杂正则表达式(区分大小写)

3

我正在使用ASP的RegularExpressionValidator,其包含一个非常复杂的正则表达式。以下是已经能够很好地工作的正则表达式:

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

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

例如,如果用户名为Meier,则不允许用户创建以下密码:

i012k34KmeIer567+

因此,我将表达式更改为:

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

然后将这些内容添加到asp:RegularExpressionValidatorValidationExpression属性中。

但是,当我这样做时,在添加密码时会在浏览器中出现错误:

"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,但我的正则表达式可以工作。有人有想法如何解决这个问题或者能告诉我我做错了什么吗?

非常感谢任何帮助!:) 如果我描述得不够清楚,请不要犹豫问我。


你有什么问题或疑问?是密码还是用户名? - nhahtdh
我需要检查用户名是否不区分大小写地出现在我的密码中。因此,我需要扩展上面的正则表达式。 - Alea M
如果与密码相关的部分无关,您能否将其编辑掉?它非常令人困惑。 - nhahtdh
3
与其试图将所有验证器都塞进一个验证器中,你可能会发现将多个验证器控件与同一字段关联起来更容易实现。 - Joel Coehoorn
好的,那么我仍然有一个问题,我必须将它定义为不区分大小写。不知何故,asp:RegularExpressionValidator 不喜欢 (?i)。 - Alea M
显示剩余2条评论
1个回答

4
除非您设置EnableClientScript="False"以禁用客户端验证,请参见MSDN,否则您的表达式需要符合Javascript的正则表达式引擎的要求。
这就是为什么var rx = new RegExp(val.validationexpression);会导致错误,您的表达式无效。
Javascript不支持行内大小写敏感标志(?i)(?-i),您长字符类需要修订。
 [+#<>;.,:|\\@*!"§$%&/()=?`´-]

由于在Javascript中无法仅为密码负向查找打开不区分大小写,因此最好单独测试密码。


分别和EnableClientScript =“False”都对我有很大帮助。非常感谢你们! :) - Alea M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接