【发布时间】:2020-04-24 05:57:53
【问题描述】:
我正在制作一个密码/密钥验证器,其中包含一组必须满足的规则才能验证密码/密钥。
这些规则如下: - 密钥长度至少为 7 个字符,且最多为 20 个字符,AND - 密钥不得以特殊字符“#”或“”开头,AND - 密钥不得任何地方都有空格字符 AND - 密钥必须至少有一个大写字符和至少一个小写字符 AND - 密钥不能包含用户名 AND - 密钥必须包含“#”或'',但不是两者兼而有之。
我已经设法让所有规则发挥作用。有两个输出根据规则检查密钥,并报告密钥有效或报告密钥失败的所有规则。
在输出中,我无法显示/报告密钥失败的所有规则。
我目前拥有的代码如下。我是java新手,请谅解。
* Asks user for key word and the name and then checks if it is a valid key word.
*/
public void doCompletion(){
String key = UI.askString("Key: ");
String name = UI.askString("Your name: ");
this.validateKeyCompletion(key, name);
}
/** COMPLETION
* Report that the key is valid or report ALL the rules that the key failed.
*/
public void validateKeyCompletion(String key, String name){
/*# YOUR CODE HERE */
int characterNumber = key.length();
boolean hasUppercase;
boolean hasLowercase;
hasUppercase = !key.equals(key.toLowerCase());
hasLowercase = !key.equals(key.toUpperCase());
String specialChars = "(.*[ # _ ].*)";
if (characterNumber < 7 || characterNumber > 20){
UI.println("Invalid: Key length must not be less than 7 or greater than 20");
}
else if (key.contains(" ")){
UI.println("Invalid: Key cannot contain ' '");
}
else if(!hasUppercase)
{
UI.println("Invalid: Key must contain an uppercase character");
}
else if(!hasLowercase)
{
UI.println("Invalid: Key must contain a lowercase character");
}
else if(key.matches(name)){
UI.println("Invalid: Key cannot contain Username");
}
else if(!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) {
UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
}
else {
UI.println("Valid");
}
}
【问题讨论】:
-
将所有
else if语句改为单独的if语句;否则它会在第一场比赛中停止 -
@Gus 感谢您的回复。所以你是说我应该删除所有的'else'并把它保留为'if'?
-
是的,这将确保所有检查都发生。但是,您需要跟踪是否有任何检查失败。最简单的方法是在所有检查之前添加
isValid=true,然后在每个 if 子句中设置 isValid=false。最后,如果isValid仍然为真,则都通过了 -
'@Gus 再次感谢您的回复。我试过你说的,但没有成功。我在所有检查之前添加了 isValid=true(在以 'if' 开头的行上方,它说没有找到带有 'isValid' 的变量。非常感谢任何帮助!
标签: java string validation if-statement key