匹配一些正则表达式条件(5个中的3个)

时间:2016-11-01 08:07:59

标签: regex

我们说我有5个条件,我用前瞻检查。我会打电话给他们

a, b, c, d, e

这将是我的正则表达式:

^(?=.*[a])(?=.*[b])(?=.*[c])(?=.*[d])(?=.*[e]).*$

regex101 - test

这将匹配a,b,c,d,e的所有排列,但我希望匹配至少3个中的3个(不排除为' hvd'指出)

这意味着这将通过:

abc
abcde
abbbbbe
abccee
cddbbbbbeee

但这不是

aaaaa
bbbaaaaa

编辑: 真正的用法是密码策略 - 5个条件(小写,大写,特殊字符,数字等),你必须符合x条件的条件。

在代码中很容易完成,但这是推动正则表达式极限的理论问题。

1 个答案:

答案 0 :(得分:1)

/^(?:(?=.*[a])(?:(?=.*[b])(?=.*(?:[c]|[d]|[e]))|(?=.*[c])(?=.*(?:[d]|[e])))|(?=.*[d])(?=.*[e])|(?=.*[b])(?:(?=.*[c])(?=.*[d])|(?=.*([c]|[d]))(?=.*[e]))|(?=.*[c])(?=.*[d])(?=.*[e])).*$/gm

这基本上具有5种可能模式的每种排列(但针对代码长度进行了优化)。

很难100%确定它的工作正常,但我想我已经有了它。 ^^