1

1 つの大文字、1 つの整数、1 つの後続の記号 (@、#、$、%、^、&、+、=) および小さな文字で構成される Java でのパスワード検証用の正規表現のコードを教えてください。

私はこれを、さまざまな個別の正規表現と1つの組み合わせた正規表現で試してきました。

実際、私はすでに JavaScript のすべての条件を評価する単一の正規表現を持っています。Java バックエンドでは使用できません。エスケープしてみました\。それも機能していません。

これが私のコードです:

    Pattern pattern = Pattern.compile("/.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/");
    Matcher matcher = pattern.matcher("Aa@1");
    if(matcher.matches()){
        System.out.println("Matched");
    }
    else{
        System.out.println("No mat");
    }

元の JavaScript 正規表現は

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

その中で\d、エスケープ文字が原因でエラーが発生しました。だから、私\はJavaバージョンでその前に別のものを追加しました.

何が問題なのか理解できません。

前もって感謝します。

4

2 に答える 2

4

あなたはもうすぐそこにいましたが、いくつかの詳細を見逃していました:

まず、出発点が悪い - JavaScript 正規表現が醜いということです。それ以外の

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

これを使って:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$/

次に、正規表現を Java に変換するには、区切り文字を削除し (追加のように代わりに引用符を使用します)、バックスラッシュを 2 倍にする必要があります (既に行ったように)。

Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$");

これで動作するはずです。

于 2011-12-27T16:13:41.920 に答える
1

/Java では 'sは必要ありません。実際にはスラッシュに一致します。また、先頭.*は役に立ちません (結果には影響しませんが)。

Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");
于 2011-12-27T16:14:05.633 に答える