2014-10-02 72 views
-1

該程序允許用戶輸入表示密碼的字符串並確定它是否有效。密碼長度必須爲8個字符,包括一個小寫字母,一個大寫字母,一個數字和一個符號(例如!@#)。我需要幫助編寫一個程序來確定密碼是否有效

輸出應爲:

Entered Password: (whatever the user entered) 
Verdict: (either valid or invalid) 

這裏是我到目前爲止的代碼:

import java.util.*; 
public class PasswordTest 
{ 
    public static void main(String[]args) 
    { 
     Scanner input = new Scanner (System.in); 

     System.out.print("Enter a password: "); 
     String Pass = input.next(); 

     System.out.println("Entered Password: " + Pass); 

     if (Pass.length() < 8) 
     { 
     System.out.println ("Verdict: Invalid"); 
     } 
     if (Pass.length() >= 8) 
     { 
     System.out.println ("Verdict: Valid"); 
     { 
    } 
} 

我不能確定如何去這一點。我假設我需要一個循環語句來確定它是否包含大寫和小寫字母以及數字和符號。

+0

在一個側面說明,請嘗試使用[控制檯#readPassword] (http://docs.oracle.com/javase/7/docs/api/java/io/Console.html#readPassword%28%29)從輸入設備讀取密碼。這可以最大限度地減少內存中密碼等敏感數據的生命週期,減少攻擊的可能性。 – asgs 2014-10-03 05:20:40

回答

0

不需要循環,使用||&&運算符代替,那樣只需要1個語句就可以了。

1

您可以使用正則表達式:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,}$ 

實現:

import java.util.regex.*; 

public class passwordvalidation { 
    public static void main(String[] args) { 
    String passwd = "[email protected]"; 
    String pattern = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{5,10}"; 
    System.out.println(passwd.matches(pattern)); 
    } 
} 

找到更多在這裏這個計算器帖子:Regex explained

相關問題