需要正则表达式来检查字符串中的至少3个大写,3个小写,3个数字和3个特殊字符。
我试过/^(?=.*[^A-Za-z0-9]{3,})(?=.*[A-Z]{3,})(?=.*\d{3,})(?=.*[0-9]{3,}).+/
但这检查连续的字符串,如:: abcABC123(*)
,但没有检查如下:1a(2b)AB*3cC
答案 0 :(得分:7)
你很接近:你需要将.*
括在你前面的角色类中:
^(?=(.*[^A-Za-z0-9]){3})(?=(.*[A-Z]){3})(?=(.*\d){3}).+
这样做的原因是字符类型可能不相邻,例如3个数字可能是a1b2c3
,因此.*
允许其他插入字符类型。
请注意,您不需要开放式量词。例如(.*\d){3}
足以断言至少有3位数 - 即不是...{3,}
最后一点:那些前导/尾随斜杠与正则表达式没有任何关系 - 它们是应用程序语言的假象。如果省略了问题和答案,那么对于更多人来说问题和答案会更清晰,更有用。
答案 1 :(得分:2)
/^(?=(.*[^A-Za-z0-9]){3,})(?=(.*[A-Z]){3,})(?=(.*\d){3,})(?=.*[a-z]){3,}).+/
所以你很亲密。
答案 2 :(得分:0)
对于与“至少3个小写”要求不匹配的字符串,其他两个答案都失败了。使用波希米亚语的答案,但支持该案例给出了以下正则表达式:
^(?=(.*[^A-Za-z0-9]){3})(?=(.*[A-Z]){3})(?=(.*[a-z]){3})(?=(.*\d){3}).+