需要正则表达式来检查至少3个大写,3个小写,3个数字和3个特殊字符

时间:2013-05-22 10:14:36

标签: regex

需要正则表达式来检查字符串中的至少3个大写,3个小写,3个数字和3个特殊字符。

我试过/^(?=.*[^A-Za-z0-9]{3,})(?=.*[A-Z]{3,})(?=.*\d{3,})(?=.*[0-9]{3,}).+/ 但这检查连续的字符串,如:: abcABC123(*),但没有检查如下:1a(2b)AB*3cC

3 个答案:

答案 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}).+