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 個の任意の文字を意味します。これは、3 つの文字クラスが含まれているという要件に対して肯定的な先読みを使用したのと同じように、否定的な後読みと否定的な先読みを使用したものです。

カスタム出力に関しては、三項式を使用するだけです。

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