用于密码匹配的正则表达式

tjf*_*rce 0 java regex

我搜索过该网站并没有找到我想要的内容.密码标准:

  1. 必须是6个字符,最多50个
  2. 必须包含1个字母字符
  3. 必须包含1个数字或特殊字符

这是我在java中的内容:

public static Pattern p = Pattern.compile(
 "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])|(?=.*[\\d~!@#$%^&*\\(\\)_+\\{\\}\\[\\]\\?<>|_]).{6,50})"
);
Run Code Online (Sandbox Code Playgroud)

问题是密码1234567匹配(它是有效的)它不应该是.

任何帮助都会很棒.

Ste*_*ler 5

我不会尝试使用单个正则表达式来做到这一点.当正则表达式变得冗长而复杂时,它们往往表现不佳.

boolean valid(String password){
    return password != null &&
    password.length() >= 6 &&
    password.length() <= 50 &&
    password.matches(".*[A-Za-z].*") &&
    password.matches(".*[0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_+\\{\\}\\[\\]\\?<>|_].*");
}
Run Code Online (Sandbox Code Playgroud)