0

我正在使用 MVC 4,剃刀开发应用程序。对于一次更改密码视图,我需要进行一些具有以下条件的验证:

它应至少匹配以下 3 项:

1.大写字母字符

2.小​​写字母字符

3. 数字

4.特殊键盘字符(脚本标签除外)

现在,我在我的模型中编写了以下正则表达式

[RegularExpression("^([a-zA-Z0-9#$%=@!{},`~&*()'?.:;_|^/+\"-]{8,32})$", ErrorMessage = "Current Password is invalid")]

但是,这将匹配任何给定的子集。我需要匹配其中至少 3 个。有人可以帮我怎么做吗?

4

1 回答 1

1

使用正则表达式进行密码验证可能不是一个好主意,但使用前瞻和 or 运算符|允许您这样做:

^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])|(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])(?=.*[a-z])(?=.*[0-9])|(?=.*[A-Z])(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])(?=.*[0-9])|(?=.*[A-Z])(?=.*[a-z])(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])).{8,32}$

这个正则表达式有 4 个部分:

(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]) 

确保至少有 1 个下 alpha、1 个上 alpha 和 1 个数字。

(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])(?=.*[a-z])(?=.*[0-9]) 

确保至少有 1 个特殊字符、1 个大写字母和 1 个数字。

(?=.*[A-Z])(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])(?=.*[0-9])

确保至少有 1 个大写字母、1 个特殊字符和 1 个数字。

(?=.*[A-Z])(?=.*[a-z])(?=.*[#$%=@!{},`~&*()'?.:;_|^/+\"-])

确保至少有 1 个大写字母、1 个小写字母和 1 个特殊字符。

与这四个一起使用|(分组为非捕获组)可以为您提供 4 次验证中的 3 次。

然后.{8,32}用于密码的长度

于 2013-07-26T07:11:06.190 回答