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