1

我在 ASP.NET 项目的密码要求正则表达式方面遇到了一些困难

输出要求如下

  • 必须至少为 8 个字符
  • 必须具备以下 4 项中的至少 3 项:
    • 至少有 1 个大写字母
    • 至少有 1 个小写字母
    • 至少有 1 个特殊字符
    • 至少有 1 个号码

我正在使用的正则表达式如下(它被转义和编码以在 web.config xml 文件中使用:

passwordStrengthRegularExpression="^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()\?\+\,\-\.\/\:\:\;\<\=\>\[\]\\_\`\{\|\}\~\"\']).*$"

我不知道如何允许其中一项要求是可选的。

密码 Reaction7 应该足够了,但是因为没有特殊字符而被拒绝。

任何人都知道我可以做些什么来评估除长度之外的 4 个要求中的 3 个吗?

4

1 回答 1

1

不确定我是否喜欢这个解决方案,但如果您仅限于使用单个正则表达式(看起来像这种情况),您可以使用管道或组枚举所有可能性:

passwordStrengthRegularExpression="^.*(?=.{8,})((?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()\?\+\,\-\.\/\:\:\;\<\=\>\[\]\\_\`\{\|\}\~\"\'])|(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()\?\+\,\-\.\/\:\:\;\<\=\>\[\]\\_\`\{\|\}\~\"\'])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()\?\+\,\-\.\/\:\:\;\<\=\>\[\]\\_\`\{\|\}\~\"\'])|(?=.*[a-z])(?=.*[A-Z])(?=.*\d)).*$"

它相当长,但确实完成了工作。但是,添加第五个要求会使该字符串的大小爆炸式增长,因此它并不完全是“可扩展的”。

于 2012-10-17T16:37:40.733 回答