Создание валидатора пароля и одно из правил: ключ должен содержать либо «#», либо «_», но НЕ оба - PullRequest
0 голосов
/ 21 марта 2020

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

Эти правила следующие: - Длина ключа должна быть не менее 7 символов, И не более 20 символов, AND - ключ не должен начинаться со специальных символов «#» или «», AND - ключ не должен содержать ни одного пробела, AND - ключ должен содержать хотя бы один заглавный символ символ и хотя бы один символ нижнего регистра, И - Ключ не должен содержать имя пользователя, И - Ключ должен содержать либо «#», либо «», но не оба.

I удалось заставить все работать, кроме последнего правила: «Ключ должен содержать либо« # », либо« _ », но не оба».

Код, который у меня сейчас есть, приведен ниже. Я новичок в изучении 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.startsWith ("#") || (key.startsWith ("_"))){
    UI.println("Invalid: Key cannot start with '#' or '_'");
   } 
   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(specialChars)){
    UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
   } 
   else {
    UI.println("Valid");
   }


}

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Следующее регулярное выражение проверяет, что ключ не начинается с '#' или '_' и содержит один из этих символов, но не оба.

    if (!key.matches("^[^#_]+[#_]{1,1}[^#_]*")) {
        UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
    }
0 голосов
/ 21 марта 2020

Попробуйте это ниже и используйте метод indexOf в 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.startsWith ("#") || (key.startsWith ("_"))){
    UI.println("Invalid: Key cannot start with '#' or '_'");
   } 
   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.indexOf('#') > -1 && key.indexOf('_') > -1){
    UI.println("Invalid: Key must contain either a '#' or a '_', but not both");
   } 
   else {
    UI.println("Valid");
   }


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