【问题标题】:Password Patteren does not matched with the Matcher class密码模式与 Matcher 类不匹配
【发布时间】:2017-04-27 06:17:35
【问题描述】:

我的密码应该是这样的:

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

我使用的模式是:^(?=.*[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 中设置错误。

可能是什么问题?

谢谢。

【问题讨论】:

标签: android passwords pattern-matching matcher


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    试试这个

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

    如果您不希望密码中有空格,请同时包含(?=\S+$)

    【讨论】:

    • java.util.regex.PatternSyntaxException:索引 50 附近的正则表达式模式中的语法错误:^(?=.*[az])(?=.*[AZ])(?=.*\ \d)(?=.*[$@$#!%*?&]){8,}$
    【解决方案3】:

    试试这个代码:

    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);
    }
    

    【讨论】:

      【解决方案4】:

      试试

      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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        相关资源
        最近更新 更多