我需要检查密码是否至少包含:
我在C#中有以下内容:
@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]"
但这不是在验证:
"Ab!123"
我错过了什么?
更新
我在System.ComponentModel.DataAnnotations中使用它来验证模型属性:
[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]"]
public String Password { get; set; }
答案 0 :(得分:2)
简单明了:你没有量词。使用
@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]+"
相反(请参阅表达式末尾的+
?)查看有效的demo on regex101.com。
与注释相反,点不需要用方括号([]
)进行转义。此外,您仍然可以优化表达式:
@"^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]+"