Создание валидатора ключа пароля и один из выходных данных должен отображаться: сообщает ВСЕ правила, что ключ не удалось - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю валидатор пароля / ключа с набором правил, которые необходимо соблюдать для подтверждения пароля / ключа.

Эти правила следующие: - длина ключа должна быть не менее 7 символов, И не более 20 символов, 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");
   }


}

1 Ответ

0 голосов
/ 28 апреля 2020

Ты довольно близко; Ваше текущее решение остановится на первом случае отказа. Поскольку вы хотите знать все случаи, которые терпят неудачу, вам нужно хранить все проверки отдельно (не в цепочке if / else if / else if). Но тогда вам нужен какой-то способ запомнить, не прошла ли какая-либо из проверок, чтобы определить, прошел / не прошел в конце. Проще всего использовать логическое значение (для этого назовем его isValid и вначале присваиваем ему значение true, а затем в каждом блоке if (который срабатывает при сбое проверки), присваиваем isValid значение false. Затем, если произойдет сбой более одного раза, пару раз будет установлено значение false, но в конце вы узнаете, что хотя бы одна из проверок завершилась неудачей.

public void validateKeyCompletion(String key, String name) {
    int characterNumber = key.length();
    boolean isValid = true;  // use this to see if any checks have failed at the end
    boolean hasUppercase;
    boolean hasLowercase;
    hasUppercase = !key.equals(key.toLowerCase());
    hasLowercase = !key.equals(key.toUpperCase());
    if (characterNumber < 7 || characterNumber > 20) {
        UI.println("Invalid: Key length must not be less than 7 or greater than 20");
        isValid = false;  // set to false for each check that fails
    }
    if (key.contains(" ")) {
        UI.println("Invalid: Key cannot contain ' '");
        isValid = false;
    }
    if (!hasUppercase) {
        UI.println("Invalid: Key must contain an uppercase character");
        isValid = false;
    }
    if (!hasLowercase) {
        UI.println("Invalid: Key must contain a lowercase character");
        isValid = false;
    }
    if (key.matches(name)) {
        UI.println("Invalid: Key cannot contain Username");
        isValid = false;
    }
    if (!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) {
        UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
        isValid = false;
    }

    // now if isValid is true, we know all the checks passed
    if(isValid) {  
        UI.println("Pass!");
    } else {
        UI.println("Fail!");
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...