需要匹配正则表达式中至少3个给定模式

时间:2013-07-26 06:42:58

标签: regex asp.net-mvc-4

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

它应至少匹配以下3项:

1。大写字母字符

2。小写字母字符

3。编号

4。特殊键盘字符(脚本标记除外)

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

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

但是,这将匹配任何给定的子集。我需要匹配至少3个。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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个上部alpha,1个下部alpha和1个特殊字符。

使用|和这四个(分组为非捕获组)可以获得4个验证中的3个。

然后使用.{8,32}作为密码的长度