Шаблон пароля 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")