我想要一个密码字符串的正则表达式,该字符串至少包含以下四种字符中的三种:
- 英文小写字符(a 到 z)。
- 英文大写字符(A 到 Z)。
- 10 位数字(0 到 9)。
- 非字母数字字符(例如 !、$、#、%)。
并且至少应包含 8 个字符。
请您参考如下方法:
考虑到这些要求可能会产生的怪异a,我怀疑您实际上最好将其作为多个检查来执行,例如(伪-代码):
def check_password (s):
if len(s) < 8:
return false
rules_followed = 0
if match (s, "[a-z]") rules_followed++;
if match (s, "[A-Z]") rules_followed++;
if match (s, "[0-9]") rules_followed++;
if match (s, "[!$#%]") rules_followed++; # et cetera
if rules_followed < 3:
return false
return true
当其他人必须维护您的代码时(或者即使 您 必须在六个月后维护它),这可能更具可读性。
现在我意识到这可能并不总是可行的(例如,您可能会受困于只允许一个正则表达式进行验证的框架)。
但是,如果可能的话,我强烈建议您考虑一下。您应该始终尝试优化的第一是可读性。
a 您要么得到那些大量的前瞻性正则表达式之一,要么得到一个包含由 | 分隔的 16 种排序可能性的正则表达式。
这些都不可能像简单的代码段那样高效或可读。
