我正在验证的密码字符串必须由八个或更多字符组成,并且必须使用正则表达式至少包含两个非字母(即,不是A-Za-z
)字符。
到目前为止,我的代码是
Pattern p = Pattern.compile("((?=2.*[^a-z[A-Z]]).{8,})");
Matcher m = p.matcher(pass);
我不知道我的表达是否正确。
答案 0 :(得分:0)
我想使用八个或更多字符来验证密码,并且必须至少包含两个非字母(即非A-Z)字符
您可以使用
s.matches("(?=(?:[^a-zA-Z]*[a-zA-Z]){2}).{8,}")
请参见regex demo。
另一种书写方式
s.matches("(?=.{8})(?:[^a-zA-Z]*[a-zA-Z]){2}.*")
说明
^
-(在.matches
中不是必需的,因为该方法需要完整的字符串匹配)-字符串的开头(?=
-正向前瞻的开始,需要立即在当前位置的右侧,
(?:[^a-zA-Z]*[a-zA-Z]){2}
-与以下两个连续出现的匹配的非捕获组:
[^a-zA-Z]*
-ASCII字母以外的任何0+个字符[a-zA-Z]
-ASCII字母)
-前瞻结束.{8,}
-除换行符以外的任何8个或更多字符,尽可能多$
-(在.matches
中不是必需的,因为该方法需要完整的字符串匹配)-字符串的结尾在(?=.{8})(?:[^a-zA-Z]*[a-zA-Z]){2}.*
模式中,第一个前瞻至少需要8个字符,然后使用(?:[^a-zA-Z]*[a-zA-Z]){2}
模式至少需要两个字母,然后.*
与字符串的其余部分匹配。