复杂密码的正则表达式
Regex for a Complex Password
我将此正则表达式作为 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.")]
我想让以下密码无效:-
- 测试
- 测试1
- TesTinG123
以下内容有效:-
- 测试1*
- T&sting123*
- %F&y5HD$S
我想要至少 6 个字符,至少有一个大写字母、一个小写字母、一个数字和一个特殊字符。我希望上面的正则表达式可以做到这一点,但它允许 Testing12 和 Tester12 作为有效密码通过。
我可以对以上内容进行哪些更改以获得我期望的结果?我假设上面需要一个大写字母,一个小写字母,一个数字和一个特殊字符,但显然我错了?
提前致谢!
你忘了正确转义]
(建议甚至把它放在字符class的开头,这样在.NET中它可以被解析为文字]
- 对于客户端验证,即使在那里也需要转义)并记住字符 class 中的连字符会创建一个范围(例如 [=-_]
),因此必须将其放在 [=字符 class 的 35=] 或末尾表示文字 -
).
使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\]*+\/|!\"£$%^&*()#[@~'?><,.=_-]).{6,}$"
^^ ^
或者,如果您只想要求至少 1 个不是字母数字的字符,请使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).{6,}$"
其中 [\W_]
匹配除单词字符以外的任何字符(即 [^\p{L}\p{N}_]
或 - 在客户端 - [^a-zA-Z0-9_]
)+ _
.
^
和 $
锚点在 RegularExpressionAttribute 模式中是多余的,但它们不会造成任何伤害。
参见regex demo。
我将此正则表达式作为 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.")]
我想让以下密码无效:-
- 测试
- 测试1
- TesTinG123
以下内容有效:-
- 测试1*
- T&sting123*
- %F&y5HD$S
我想要至少 6 个字符,至少有一个大写字母、一个小写字母、一个数字和一个特殊字符。我希望上面的正则表达式可以做到这一点,但它允许 Testing12 和 Tester12 作为有效密码通过。
我可以对以上内容进行哪些更改以获得我期望的结果?我假设上面需要一个大写字母,一个小写字母,一个数字和一个特殊字符,但显然我错了?
提前致谢!
你忘了正确转义]
(建议甚至把它放在字符class的开头,这样在.NET中它可以被解析为文字]
- 对于客户端验证,即使在那里也需要转义)并记住字符 class 中的连字符会创建一个范围(例如 [=-_]
),因此必须将其放在 [=字符 class 的 35=] 或末尾表示文字 -
).
使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\]*+\/|!\"£$%^&*()#[@~'?><,.=_-]).{6,}$"
^^ ^
或者,如果您只想要求至少 1 个不是字母数字的字符,请使用
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).{6,}$"
其中 [\W_]
匹配除单词字符以外的任何字符(即 [^\p{L}\p{N}_]
或 - 在客户端 - [^a-zA-Z0-9_]
)+ _
.
^
和 $
锚点在 RegularExpressionAttribute 模式中是多余的,但它们不会造成任何伤害。
参见regex demo。