我正在使用MVC 4开发一个应用程序razor。对于一个更改密码视图,我需要进行一些具有以下条件的验证:
它应至少匹配以下3项:
1。大写字母字符
2。小写字母字符
3。编号
4。特殊键盘字符(脚本标记除外)
现在,我在我的模型中写了正则表达式
[RegularExpression("^([a-zA-Z0-9#$%=@!{},`~&*()'?.:;_|^/+\"-]{8,32})$", ErrorMessage = "Current Password is invalid")]
但是,这将匹配任何给定的子集。我需要匹配至少3个。有人可以帮我解决这个问题吗?
答案 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}
作为密码的长度