Java 验证密码是否不存在';t包含3+;名称中的连续字符

Java 验证密码是否不存在';t包含3+;名称中的连续字符,java,regex,validation,passwords,Java,Regex,Validation,Passwords,我需要在Java中进行以下密码验证 长度必须至少为8个字符 必须包含至少1个数字 必须包含至少1个大写字母 必须包含至少1个小写字母 不能包含您的全名或用户名中的3个或更多连续字符(例如,如果您的名字是Will,则您不能使用密码Stiller458) 我有前4分,最后一分怎么办 目前我有: String pattern = "^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\\S{8,}$"; boolean passwordValidation = origin

我需要在Java中进行以下密码验证

  • 长度必须至少为8个字符
  • 必须包含至少1个数字
  • 必须包含至少1个大写字母
  • 必须包含至少1个小写字母
  • 不能包含您的全名或用户名中的3个或更多连续字符(例如,如果您的名字是
    Will
    ,则您不能使用密码
    Stiller458
我有前4分,最后一分怎么办

目前我有:

String pattern = "^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\\S{8,}$";
boolean passwordValidation = originalPassword.matches(pattern);

最后一点不是你用正则表达式做的事情。循环遍历名称,并检查密码

正则表达式擅长于模式,而不是解析。无论如何,您必须使用循环遍历名称。

对于您的1,2,3,4案例

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{8,}$
你的第五个案子

public boolean isValid(final String userName,final String password)
{
    for(int i=0;(i+2)<userName.length();i++)
          if(password.indexof(userName.substring(i,i+2))!=-1)
                return false;
    return true;
}
public boolean有效(最终字符串用户名、最终字符串密码)
{

对于(int i=0;(i+2)你必须用正则表达式来做这件事吗?最后一点可能是不可能的。谁让你用正则表达式来做这件事的?你应该给他一块唐纳特!谢谢大家,我一直在和那些不使用正则表达式的人斗争,他们坚持这是可能的,当我告诉他们把正则表达式给我时,他们刚刚走开了。一个数字,
[^a-zA-Z]
应该是
[0-9]
。你可能想要
而不是
\\S
。我得到了一个“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:8”,知道为什么吗?@Vivek oops.现在检查编辑..而不是使用
userName.length()
我使用了
password.length()
.small errorTnx,我还将if(password.indexof(userName.substring(I,I+2))!=-1)更改为if(password.indexof(userName.substring(I,I+3))!=-1)以满足包含3或more@Vivek检查3与检查4,5,6,7…一样好,所以您只需要检查3个字符。。