【问题标题】:Aspx RegularExpressionValidator works differently on client and serverAspx RegularExpressionValidator 在客户端和服务器上的工作方式不同
【发布时间】:2011-04-18 14:02:58
【问题描述】:

我在获取 RegularExpressionValidator 的正则表达式以在客户端上工作时遇到了一些问题:

(?=.{8,})(?=.*[A-Z])(?=.*[\d])(?=.*[\W])|(?=.*[a-z])(?=.*[\d])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\d])

如果提供的字符串,这个表达式应该返回真

  • 至少包含八个字符
  • 在“小写字母”/“大写字母”/“数字”/“特殊字符”四组中的三组中至少有一个字符

在 C# (.NET 3.5) 中使用此表达式直接返回不同测试字符串的预期结果,但在客户端浏览器中,有效字符串(例如 aaaaBBB1)不起作用。

我已阅读thread here,因此解释是客户端使用 JavaScript,与 .NET 实现相比,它的工作方式略有不同。

现在我尝试在 JavaScript 中运行我的正则表达式来验证在上面链接的线程中生成的参数,但是在 JavaScript 中我的正则表达式的工作方式与在 C# 中相同。

还有其他方法可以让 RegularExpressionValidator 正常工作吗?我不明白为什么 JavaScript 可以工作(在阅读了实现差异之后我预计它不会工作)但 RegularExpressionValidator 不能。

提前感谢任何指向正确方向的指针。

G.

【问题讨论】:

  • 对于特殊的“\X”字符类(如“\d”和“\W”),不需要写成“[\d]”;这与“\d”本身完全相同。
  • @Pointy - 谢谢,不知道

标签: javascript asp.net regex validation


【解决方案1】:

尝试以下方法:

^(?:(?=.*[A-Z])(?=.*\d)(?=.*\W)|(?=.*[a-z])(?=.*\d)(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\d)).{8,}$

您的正则表达式将允许长度小于 8 的字符串通过,因为长度断言只是第一次替换的一部分。

然后(这可能是问题所在)您的正则表达式永远不会匹配任何文本,它只会进行断言。因此,我在字符限制之外采用了“长度正则表达式”并使其成为实际匹配。

这应该适用于 JavaScript 和 .NET。

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多