我正在尝试使用正则表达式,只允许用户特定的给定密码。
我试过了,但它不工作
^[a-zA-Z0-9@\\#$%&*()_+\\]\\[';:?.,!^-]{"+MIN_LENGTH+","+MAX_LENGTH+"}$
MIN_LENGTH 和 MAX_LENGTH 来自数据库它的工作最小和最大长度大小写,我如何给出特定的大写、小写、数字和特殊字符。
问候普拉迪普
恐怕正则表达式没有那么强大。您可能会找到使用单个正则表达式的解决方案,但它将完全不可读且不可扩展。我建议您将每个约束逻辑分成一个子正则表达式。例如:
public static boolean isPasswordValid(String password) {
// 1 to 3 occurrences of lowercased chars
if (!password.matches("(?:[^a-z]*[a-z]){1,3}[^a-z]*")) {
return false;
}
// 2 to 4 occurrences of uppercased chars
if (!password.matches("(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*")) {
return false;
}
// 3 to 5 occurrences of digits
if (!password.matches("(?:[^0-9]*[0-9]){3,5}[^0-9]*")) {
return false;
}
// 4 to 6 occurrences of special chars (simplified to "_", "." or "-")
if (!password.matches("(?:[^_.-]*[_.-]){4,6}[^_.-]*")) {
return false;
}
// no other kind of chars, and password length from 3 to 20
if (!password.matches("[a-zA-Z0-9_.-]{3,20}")) {
return false;
}
return true;
}