我制作了一个基本功能来检查密码是否符合各种业务规则。有大写字符、数字等。
我想通过根据需要打开和关闭这些选项来使此功能更加灵活和可配置。我能想到的唯一方法是:
public static boolean isPasswordValid(String pwd, boolean checkUpper, boolean checkLower, boolean checkNum) {
boolean hasUppercase = !pwd.equals(pwd.toLowerCase(Locale.getDefault()));
boolean hasLowercase = !pwd.equals(pwd.toUpperCase(Locale.getDefault()));
boolean hasNumeric = pwd.matches(".*\\d+.*");
boolean isValid = false;
if(checkUpper){
if(hasUppercase) {
isValid = true;
}else{
return isValid;
}
}
return isValid;
}
我觉得有一个更好的方法,使用枚举或其他东西。我希望能够传递密码和一个额外的参数作为启用各种检查的标志。随着时间的推移,我不可避免地需要添加更多内容。
如果我要使用枚举,按照我的思维方式,我必须为每种可能的情况定义一个 eNum。即上、上和下、上和数字。如果我必须添加更多选项,这将变得非常复杂。
任何想法和建议都将受到欢迎。谢谢。
最佳答案
您可以使用 EnumSet,它是专门用于枚举的集合。
public static enum Validation {
UPPER, LOWER, DIGIT //etc.
}
public static boolean isPasswordValid(String pwd, EnumSet<Validation> validations) {
//...
}
然后,您可以通过向集合中添加必要的值来使用任意验证组合。示例:
EnumSet<Validation> validation = EnumSet.of(Validation.UPPER, Validation.LOWER);
if (isPasswordValid(pass, validation)) {
//...
}
关于java - 具有切换选项的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717202/