有效的正则表达式不适用于 MVC 正则表达式属性 ASP.Net



我有一个正则表达式来验证密码规则。

在.Net控制台应用程序中,它按预期正确拒绝或验证密码。

var strongRegex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])");
Console.WriteLine(strongRegex.IsMatch("Test_1234"));

正如预期的那样,这将返回"true"。

当我在ASP.Net MVC项目中将其添加到我的模型中时,jQuery在客户端上的不引人注目的验证会拒绝这个值。

[RegularExpression("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])"]

由于阅读了以前框架版本中的大小写敏感性问题,我查看了页面源代码,以了解这是如何呈现的,但这里似乎不是这样。。。它在input元素上呈现以下内容:

data-val-regex-pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])"

这会导致在控制台应用程序中工作的相同值("Test_1234"(无法通过客户端验证。

似乎您的密码验证规则是:

  1. 必须至少有一个数字
  2. 必须至少有1个大写字符
  3. 必须至少有1个小写字符
  4. 必须至少有1个其他字符与前三个规则之一不匹配

如果我读对了,试试这个:

^((?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])).*

最新更新