gpt4 book ai didi

c# - 复杂密码的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:19 24 4
gpt4 key购买 nike

我将此正则表达式作为 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
  • 测试TinG123

以下是有效的:-

  • 测试1*
  • T&sting123*
  • %F&y5HD$S

我想要至少 6 个字符,其中至少有一个大写字母、一个小写字母、一个数字和一个特殊字符。我希望上面的正则表达式能做到这一点,但它让 Testing12Tester12 作为有效密码通过。

我可以对上面的内容进行哪些更改以获得我期望的结果?我假设上面需要一个大写字母、一个小写字母、一个数字和一个特殊字符,但显然我错了?

提前致谢!

最佳答案

你忘了正确地转义](建议甚至把它放在字符类的开头,这样在.NET中它可以被解析为文字] - 对于客户端验证,即使在那里也需要转义)并记住字符类中的连字符会创建一个范围(例如 [=-_]),因此它必须放在字符类的结束/开始或在末尾表示文字 -)。

使用

"^(?=.*[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_]) + _

^$ anchor 在 RegularExpressionAttribute 模式中是多余的,但它们不会造成任何伤害。

参见 regex demo .

关于c# - 复杂密码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com