^(?=(.*\d){4,})(?=(.*[A-Z]){3})(?!\s)(?=.*\W{2,})(?=(.*[a-z]){2,}).{12,14}$
上面的RegExp试图:
(?=(.*\d){4,})
(?=(.*[A-Z]){3})
(?!\s)
(?=.*\W{2,})
(?=(.*[a-z]){2,})
.{12,14}
但是我遇到了一个挑战,希望避免匹配空格。看起来因为\ W还包含空格,我之前对空格的负面预测被忽略了。
例如:
b4A@Ac33*8Pd
- 应匹配b4A@Ac3 3*8Pd
- 不应该匹配编辑提供进一步澄清:
基本上,我试图避免拼出POSIX [:punct:]类中的所有字符,即!"#$%&'()*+,./:;<=>?@\^_\
{|}〜-..这就是为什么我需要使用\ W ..但我也想排除空格
我可以使用第二双眼睛,以及更有经验的建议......
再次编辑,纠正子模式中指定的计数混淆,如下面接受的答案所述。
答案 0 :(得分:1)
使用非空格.
:
\S
^(?=(.*\d){3,})(?=(.*[A-Z]){2})(?=.*\W{1,})(?=(.*[a-z]){1,})\S{12,14}$
// here ___^^
这是一个错字match at least 4 digits - (?=(.*\d){3,})
,
它应该是:
match at least 3 digits - (?=(.*\d){3,})
或
match at least 4 digits - (?=(.*\d){4,})
与其他计数相同。