以下约束的正则表达式是什么?

Gir*_*ari 1 .net c# regex validation

我想要一个密码字符串的正则表达式,其中包含以下四种字符中的至少三种:

  • 英文小写字母(a到z).
  • 英文大写字符(通过Z).
  • 基数为10位(0到9).
  • 非字母数字字符(例如!,$,#,%).

并且应该包含至少8个字符.

pax*_*blo 10

鉴于怪物一个,这些要求可能产生,我怀疑你实际上是将是更好做这个作为多重检查,像(伪代码):

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
Run Code Online (Sandbox Code Playgroud)

当其他人必须维护您的代码时(或者即使必须在六个月后维护它),这可能更具可读性.

现在我意识到这可能并不总是可能的(例如,您可能会遇到只允许一个正则表达式进行验证的框架).

但是,如果可能,我强烈建议你考虑一下.您应该始终尝试优化的第一件事是可读性.


a你要么最终得到其中一个巨大的前瞻性正则表达式,要么是一个包含16个可能性排序的正则表达式|.

这些都不像简单的代码段那样高效或可读.

  • +1比编写正则表达式更容易测试4种类型的所有可能组合. (5认同)