Проверка пароля в java. Он должен содержать не менее 10 букв (цифр или цифр) и не менее 2 цифр. - PullRequest
0 голосов
/ 08 мая 2020

У меня проблема с моим кодом. Он читает, если пароль содержит не менее 10 символов, но насчет цифр, он не работает. Он всегда говорит мне, что пароль должен содержать как минимум 2 цифры.

public class EsercizioPassword {

    static int passLength = 10;
    static String pass = "hello1221";

    public static void main(String[] args) {


        checkPass();
    }

    public static void checkPass() {
        int digit=0;
        for (int i = 0; i < pass.length(); i++) {
            if(Character.isDigit(pass.charAt(i))) {
                digit++;
                if(digit<2) {
                    System.out.println("At least 2 digits");
                    return;
                }
            }
            if (!Character.isLetterOrDigit(pass.charAt(i))) {
                System.out.println("Password must contains only Lettere or Digit ");
                return;
            }else if (pass.length() < 10) {
                System.out.println("Password must contains at least 10 characters");
                return;
            }

        }
        System.out.println("Correct password");

    }
}

Ответы [ 3 ]

2 голосов
/ 08 мая 2020

Вы проверяете счет di git, как только увеличиваете его. Вы должны убедиться, что digit>=2 после выхода for l oop.

Вы делаете то же самое для проверки длины. Вытащите и это из l oop.

1 голос
/ 08 мая 2020

Вы должны использовать массив символов вместо String для хранения пароля в качестве хорошей практики программирования. Также избегайте множественных операторов возврата. Это затрудняет чтение программы. См. Следующий фрагмент. Я его не компилировал и не запускал. Но в основном это должно работать.

 public static boolean checkPass(char[] pass) {
        boolean isValid = true;
        int digit=0;

        if(pass.length <10) {
            isValid = false;
            System.out.println("Password must contains at least 10 characters");
        }
        else {
            for (int i = 0; i < pass.length; i++) {
                if (!Character.isLetterOrDigit(pass[i]))) {
                    System.out.println("Password must contains only Lettere or Digit ");
                    isValid = false;
                    break;
                }
                else if(Character.isDigit(pass[i])) {
                    digit++;
                    if(digit==2) {
                       break;
                    }
                }
            }
            if (digit != 2) {
                  System.out.println("At least 2 digits");
                  isValid =false;
            }
        }
        if(isValid)
            System.out.println("Correct password");    
        return isValid;
    }
1 голос
/ 08 мая 2020

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

public static boolean checkPass() {
    return pass.matches("(?=.{10,}).*\\d.*\\d.*");
}

Используемый здесь шаблон регулярного выражения (включая ^ и $ якоря, которые добавляются String#matches()):

^(?=.{10,}).*\d.*\d.*$

Этот шаблон утверждает, что длина составляет 10 или более, и что по крайней мере два символа пароля являются цифрами.

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