0

我正在尝试使用正则表达式,只允许用户特定的给定密码。

我试过了,但它不工作

^[a-zA-Z0-9@\\#$%&*()_+\\]\\[';:?.,!^-]{"+MIN_LENGTH+","+MAX_LENGTH+"}$

MIN_LENGTH 和 MAX_LENGTH 来自数据库它的工作最小和最大长度大小写,我如何给出特定的大写、小写、数字和特殊字符。

问候普拉迪普

4

1 回答 1

0

恐怕正则表达式没有那么强大。您可能会找到使用单个正则表达式的解决方案,但它将完全不可读且不可扩展。我建议您将每个约束逻辑分成一个子正则表达式。例如:

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;
}
于 2013-09-04T15:07:24.307 回答