在 Java 中,用正则表达式校验密码是非常常见的需求。下面按常见规则给你总结几种典型写法,并解释含义,方便你直接选用或组合。
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,18}$
含义:
(?=.*[A-Za-z]):至少包含一个字母(?=.*\d):至少包含一个数字{6,18}:长度 6 到 18✅ Java 示例:
String regex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{6,18}$";
boolean ok = password.matches(regex);
^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*]).{8,20}$
含义:
(?=.*[A-Za-z]):字母(?=.*\d):数字(?=.*[!@#$%^&*]):特殊字符.{8,20}:任意字符,长度 8–20✅ Java:
String regex = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[!@#$%^&*]).{8,20}$";
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,20}$
✅ 要求:
public class PasswordTest {
public static void main(String[] args) {
String password = "Abc123!@#";
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*])[A-Za-z\\d!@#$%^&*]{8,20}$";
boolean isValid = password.matches(regex);
System.out.println(isValid);
}
}
\// 错误
"(?=.*\d)"
// 正确
"(?=.*\\d)"
^ 和 $// 可能只匹配部分内容
"^(?=.*\\d).{6,}$"
✅ 强烈建议加上 ^ 和 $
如果你是真实项目,建议用 多条件判断,可读性更好:
boolean hasUpper = password.matches(".*[A-Z].*");
boolean hasLower = password.matches(".*[a-z].*");
boolean hasDigit = password.matches(".*\\d.*");
boolean hasSpecial = password.matches(".*[!@#$%^&*].*");
boolean validLength = password.length() >= 8 && password.length() <= 20;
boolean ok = hasUpper && hasLower && hasDigit && hasSpecial && validLength;
✅ 优点:
我可以帮你定制正则,比如:
只要告诉我你的密码规则,我可以直接给你最终版 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。