密码检查程序应该用户输入用户名和密码,并输出密码是有效还是无效。
我一直试图使用正则表达式,但我遇到了问题。该模式适用于我的所有规则,但其中一个是用户名规则。 另外,有没有办法改变" true"的输出?或"假"定制的东西?
到目前为止我的代码:
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?
}
}
我感谢任何帮助! :)
答案 0 :(得分:1)
您应该能够初步检查它是否具有该子序列。 我会先检查一下然后检查你的密码规则。 所以像这样(使用正则表达式):
// 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...
最好在字符串(docs)上使用contains
方法。
if (pw.contains(un)) {...}
至于自定义matches
的输出,你不能。你需要有条件地分支并做一些不同的事情。
答案 1 :(得分:0)
对于用户名检查,您可以将正则表达式更改为
"(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])((?<!" + Pattern.quote(un) + ").(?!" + Pattern.quote(un) + ")){8,}"
表示至少8个未跟随或前面有用户名的任意字符。正如您使用正向前瞻来满足包含三个字符类的要求一样,这具有负面的后观和负向前瞻。
关于自定义输出,只需使用三元表达式:
System.out.println(pw.matches(req) ? "yehaw" : "buuuuuh")