Шаблон пароля Java

Предполагается, что программа проверки паролей принимает пользовательский ввод имени пользователя и пароля и выводит, является ли пароль действительным или недействительным.

Я пытался использовать регулярные выражения для этого, но у меня проблема. Шаблон работает для всех моих правил, кроме одного, правила имени пользователя. Кроме того, есть ли способ изменить вывод с "true" или "false" на что-то нестандартное?

Мой код до сих пор:

import java.util.regex.*;
import java.util.Scanner;

public class validPassword {
    private static Scanner scnr;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        // Variable Management
        String un, pw, req; // Variable Variable

        System.out.println("Please enter a username: ");
        // ^Need to implement so if it matches the password it's invalid^
          un = input.nextLine(); // Gathers user's username input
        System.out.println("Please enter a password: ");
          pw = input.nextLine(); // Gathers user's password input

        req = "(?=.*[0-9])(?=.*[a-zA-Z]).{8,}";
        System.out.println(pw.matches(req)); // Can I customize the output?
    }

}

Я ценю любую помощь!:)

2 ответа

Вы должны быть в состоянии просто сначала проверить, есть ли у этого подпоследовательность. Я бы проверил это вначале, а затем проверил правила вашего пароля. Так что-то вроде этого (с помощью регулярных выражений):

// get username and password
if(pw.matches(".*"+Pattern.quote(un)+".*")){
    System.out.println("Password can't have username in it...");
}
// make sure password follows rules...

Лучше было бы использовать contains метод на строки ( документы).

if (pw.contains(un)) {...}

Что касается настройки вывода matches ты не можешь Вам нужно будет условно переходить и делать что-то другое.

Для проверки имени пользователя вы можете изменить регулярное выражение на

"(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])((?<!" + Pattern.quote(un) + ").(?!" + Pattern.quote(un) + ")){8,}"

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

А что касается пользовательского вывода, просто используйте троичное выражение:

System.out.println(pw.matches(req) ? "yehaw" : "buuuuuh")
Другие вопросы по тегам