【问题标题】:asp.net RegularExpressionValidator and complex regular expression (case sensitive switch)asp.net RegularExpressionValidator 和复杂的正则表达式(区分大小写开关)
【发布时间】:2013-01-30 12:50:30
【问题描述】:

我正在使用带有非常复杂的正则表达式的 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,但我的正则表达式在那里工作。有谁知道我该如何解决这个问题,或者谁能告诉我我做错了什么?

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

【问题讨论】:

  • 那么您的问题/问题是什么?密码还是用户名?
  • 如果用户名出现在我的密码中,我必须检查不区分大小写。所以为此我需要扩展上面的正则表达式。
  • 如果讨论密码的部分无关紧要,可以编辑掉吗?这很混乱。
  • 好的,我会让它变得更简单。但这是关于密码中出现用户名的问题。
  • 您可能会发现通过将多个验证器控件与同一字段关联起来更容易实现这一点,而不是将所有内容都塞进一个验证器中。

标签: c# asp.net regex validation


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 单独和 EnableClientScript = "False" 对我都有很大帮助。非常感谢大家! :)
猜你喜欢
  • 2013-11-12
  • 2011-04-22
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多