Проблемы с возвратом правильного кода с использованием символьного пароля Java - PullRequest
0 голосов
/ 08 июня 2018

Проблема, с которой я сталкиваюсь, заключается в том, что когда кто-то вводит пароль, который состоит из цифр, прописных и строчных букв, программа по-прежнему говорит, что все они нужны.

Мне нужна программа, чтобы перечислить все требования к паролю, еслиони не выполняются.

Например:

A123456789aa возвращает: «Вам нужен хотя бы один нижний регистр. Пожалуйста, введите ваш пароль:»

Должен вернуться: «Введите завершениеключ "

public static void main(String[] args) {

    Scanner input = new Scanner (System.in);

    boolean condition = true;
    while (condition) {
        System.out.print("Please Enter Your Password: ");
        String password = input.nextLine();

        if (password.equals("endofinput")) {
            System.out.print("Your password is valid"); condition = false;

        } else {
            System.out.print(passCheck(password));
            condition = true;
        }
    }
    input.close();
}


public static String passCheck(String password) {
    String specialChars = "/*!@#$%^&*()\"{}_[]|\\?/<>,." + " ";

      if (password.length() < 8) {
        return ("You need at least 8 characters. ");

    } for (int i = 0; i < password.length(); i++) {
        if (specialChars.contains(password.substring(i)))
            return ("Your password cannot contain special characters. ");
        else if (password.equals("password"))
            return ("Your password cannot be password. ");
        else if(!Character.isUpperCase(password.charAt(i)))
            return ("You need at least one uppercase. ");
        else if (!Character.isLowerCase(password.charAt(i)))
            return ("You need at least one lowercase. ");
        else if (!Character.isDigit(password.charAt(i)))
            return ("You need at least one digit. ");   
    }
return "Enter termination key";
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете использовать эту функцию проверки

public static String passCheck(String password) {
    //String specialChars = "/*!@#$%^&*()\"{}_[]|\\?/<>,." + " ";
    String expected_pattern = "^[a-zA-Z0-9]{8,}$";
    String lowercase_pattern = "(.*)[a-z]+(.*)";
    String uppercase_pattern = "(.*)[A-Z]+(.*)";
    String digit_pattern = "(.*)[0-9]+(.*)";

    if (password == null || password.length() < 8) return ("You need at least 8 characters. ");     
    if (password.toLowerCase().equals("password")) return ("Your password cannot be password. ");
    if (!password.matches(lowercase_pattern)) return ("You need at least one lowercase. ");
    if (!password.matches(uppercase_pattern)) return ("You need at least one uppercase. ");
    if (!password.matches(digit_pattern)) return ("You need at least one digit. ");
    if (!password.matches(expected_pattern)) return ("Your password cannot contain special characters. ");

    return "Enter termination key";
}
0 голосов
/ 08 июня 2018

ваш метод passCheck выполняет итерацию по всем символам и возвращает результат, если один символ не выполняет одно из ваших требований.В качестве альтернативы можно предположить, что ввод недействителен, пока все требования не будут выполнены:

boolean foundUppercase = false;
    boolean foundLowercase = false;
    boolean foundDigits = false;
    //Dont have to do the check for password as input for every letter in the word.
    if (password.equals("password"))
        return ("Your password cannot be password. ");

    for (int i = 0; i < password.length(); i++) {
        if (specialChars.contains(password.substring(i)))
            //only in this case we can for sure say that the input is not valid
            return ("Your password cannot contain special characters. ");
        else if (Character.isUpperCase(password.charAt(i)))
            foundUppercase=true;
        else if (Character.isLowerCase(password.charAt(i)))
            foundLowercase= true;
        else if (Character.isDigit(password.charAt(i)))
            foundDigits = true;
    }
    if (!foundUppercase) {
        // uppercase letter missing
        return ("You need at least one uppercase. ");
    } else if (!foundLowercase) {
        // lower case letter missing
        return ("You need at least one lowercase. ");
    } else if (!foundDigits) {
        // missing digits
        return ("You need at least one digit. ");
    }

    return "Enter termination key";
...