正则表达式密码要求和操作要求

时间:2012-10-17 16:27:40

标签: regex passwords

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

输出要求如下

  • 必须至少8个字符
  • 以下4项必须至少有3项:
    • 至少有1封大写字母
    • 至少有1个小写字母
    • 至少有一个特殊字符
    • 至少有一个号码

我正在使用的正则表达式如下(这是为了在web.config xml文件中使用而进行转义和编码:

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

我无法弄清楚如何允许其中一项要求是可选的。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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