密码模式与匹配器不匹配 class

Password Patteren does not matched with the Matcher class

我的密码应该是:

"密码应至少包含一个大写字母、一个小写字母、一位数字和一个特殊字符,最少八个字符长度"

我使用的模式是:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$#!%*?&])[A-Za-z\d$@$#!%*?&]{8,}

因此,我在 Constant.java 文件中创建了如下函数:

public static Boolean passwordMatcher(TextInputLayout edtText,String string) {
    Pattern pattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$#!%*?&])[A-Za-z\\d$@$#!%*?&]{8,}");
    Matcher matcher = pattern.matcher(edtText.getEditText().getText().toString());
    boolean isMatched = matcher.matches();
    if (isMatched) {
        return true;
    }
    if (!isMatched) {
        edtText.setErrorEnabled(true);
        edtText.setError("" + string);
        edtText.setFocusable(true);
        return false;
    }
    return true;
}

在我的 MainActivity.java 文件中,我检查了如下验证:

if (!Constant.passwordMatcher(edtPassword, mContext.getResources().getString(R.string.error_activity_signup_password_invalid))) {
    return;
}

但是,即使我尝试过,我也没有成功:'Jaimin123#' 作为我的密码。 总是在我的 TextInputLayout 中设置错误。

可能是什么问题?

谢谢。

试试这个

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@#!%*?&]).{8,}$

如果您不想在密码中使用白色 space,还包括 (?=\S+$)

尝试使用以下正则表达式进行密码匹配。

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

此正则表达式将检查以下规则:

  1. 至少一个大写字母
  2. 至少一个小写字母
  3. 至少一位数字
  4. 至少一个特殊字符
  5. 长度至少为 8

试试这个代码:

public void checkPattern(String password) {     
    Pattern pattern = Pattern.compile("(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W).{8,}");
    Matcher matcher = pattern.matcher(password);
    boolean isMatched = matcher.matches();
    System.out.println(isMatched);
}

尝试

public boolean matchesPattern(String password) {        
    Pattern pattern = Pattern.compile("^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$");
    Matcher matcher = pattern.matcher(password);
    return matcher.matches();
}