Java 连续组合具有相同字符的密码正则表达式

Java 连续组合具有相同字符的密码正则表达式,java,javascript,regex,Java,Javascript,Regex,我有一个这样的密码正则表达式 ^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*])).{0,100}$ 我想添加正则表达式,它将验证这一点,并排除连续插入四个相同字符 我发现这个模式将提供匹配的4个相同的字符,但我如何组合它们,这个模式应该检查是否有4个相同的字符密码应该是无效的 ()\1{3}这项工作: ^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*]))((.)(?!\3{3})){0,1

我有一个这样的密码正则表达式

^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*])).{0,100}$
我想添加正则表达式,它将验证这一点,并排除连续插入四个相同字符

我发现这个模式将提供匹配的4个相同的字符,但我如何组合它们,这个模式应该检查是否有4个相同的字符密码应该是无效的

()\1{3}

这项工作:

^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*]))((.)(?!\3{3})){0,100}$
说明:

^                     // beginning of string
(                     // begin capturing group #1 (this is actually unnecessary)
  (?=.*\d)            // must contain a digit
  (?=.*[a-z])         // must contain a lowercase letter
  (?=.*[A-Z])         // must contain an uppercase letter
  (?=.*[!@#$%&*])     // must contain a special character
)                     // end capturing group #1
(                     // begin capturing group #2: one character of password, for repetition quantifier
  (.)                 // capturing group #3: one character of password, for negative lookahead
  (?!\3{3})           // character is not followed by itself 3 times
)                     // end capturing group #2
{0,100}               // repeat group #2 up to 100 times
$                     // end of string

我想你必须使用一个单独的测试…我如何检查说它是否不匹配然后密码是有效的(使用正则表达式)从lookaheads(外圆括号)中删除捕获组并添加一个负的lookahead
(?!*()\1{3})