0

密码检查程序应该接受用户输入的用户名和密码,并输出密码是有效还是无效。

我一直在尝试为此使用正则表达式,但遇到了问题。该模式适用于我的所有规则,但用户名规则除外。另外,有没有办法将输出从“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?
    }

}

我很感激任何帮助!:)

4

2 回答 2

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...

最好contains在字符串(docs)上使用该方法。

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

至于定制matches你不能的输出。您需要有条件地分支并做一些不同的事情。

于 2016-09-25T01:02:38.707 回答
0

对于用户名检查,您可以将正则表达式更改为

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

这意味着至少有 8 个任意字符,用户名后面或前面都没有。就像您对包含三个字符类的要求使用正向前瞻一样,这是使用负向后视和负向前瞻。

关于自定义输出,只需使用三元表达式:

System.out.println(pw.matches(req) ? "yehaw" : "buuuuuh")
于 2016-09-25T01:12:47.017 回答