我已将此正则表达式作为C#.NET MVC项目中密码字段的数据注释。
[RegularExpression("(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*+\\/|!\"£$%^&*()#[\\]@~'?><,.=-_]).{6,}", ErrorMessage = "Password must be between 6 and 20 characters and contain one uppercase letter, one lowercase letter, one digit and one special character.")]
我想让以下密码无效: -
以下内容有效: -
我想要至少6个字符,至少有一个大写字母,一个小写字母,一个数字和一个特殊字符。我希望上面的正则表达式可以做到这一点,但它允许 Testing12 和 Tester12 作为有效密码。
我可以在上面做些什么来改变我的期望?我假设上面需要一个大写,一个小写,一个数字和一个特殊字符,但显然我错了?
提前致谢!
答案 0 :(得分:4)
你忘了正确地逃避]
(建议把它放在角色类的开头,以便在.NET中它可以被解析为文字]
- 用于客户端验证,它甚至需要转义)并记住字符类中的连字符创建一个范围(例如[=-_]
),因此它必须放在字符类的结尾/开头或结尾处表示文字-
)。
使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\]*+\\/|!\"£$%^&*()#[@~'?><,.=_-]).{6,}$"
^^ ^
或者,如果您只想要至少1个不是字母数字的字符,请使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).{6,}$"
其中[\W_]
匹配任何字符,但字符为char(即[^\p{L}\p{N}_]
或 - 在客户端 - [^a-zA-Z0-9_]
)+ _
。
^
和$
锚点在RegularExpressionAttribute模式中是多余的,但它们不会造成任何伤害。
请参阅regex demo。