2016-03-22 16 views
0

私が抱えている問題は、パスワードを確認する前に最初のパスワードプロセスを繰り返すことです。Javaパスワードチェック

パスワードは8文字以上でなければなりません。

パスワードが含まれている必要があり、少なくとも:

  • 1英字[a-zA-Z]
  • つの数字[0-9]英数字ではありません
  • 1つの文字、など ! # @ $ %^& * () - _ = + [ ] ; : ' " , <.>/?

パスワードは次のいずれでもかまいません。

  • はスペース
  • はここ感嘆[!]または疑問符[?]

で始まる含まれ、それはの一つ私に指示した後、私は取得していますどのようなコード

public static void main(String[] args) { 

    //declare variables 
    String inputPassword;  // variable for password 
    String confirmPassword; 

    // set up input stream from the keyboard 
    Scanner input = new Scanner (System.in); 

    // ask for password 
    System.out.print("Password : "); 
    inputPassword = input.next(); 
    passCheck(inputPassword); 

    System.out.print("Please confirm your password : "); 
    confirmPassword = input.next(); 


    if(inputPassword.matches(confirmPassword)){ 
     System.out.println("Password successfully created."); 
    } else { 
     System.out.println("Passwords do not match."); 
    } 


} 

public static void passCheck(String password){ 
    boolean valid = true; 
    if(password.length() < 8){ 
     System.out.println("Password is not eight characters long."); 
     valid = false; 
    } 
    String upperCase = "(.*[A-Z].*)"; 
    if(!password.matches(upperCase)){ 
     System.out.println("Password must contain at least one capital letter."); 
     valid = false; 
    } 
    String numbers = "(.*[0-9].*)"; 
    if(!password.matches(numbers)){ 
     System.out.println("Password must contain at least one number."); 
     valid = false; 
    } 
    String specialChars = "(.*[ ! # @ $ %^& * () - _ = + [ ] ; : ' \" , <.>/?].*)"; 
    if(!password.matches(specialChars)){ 
     System.out.println("Password must contain at least one special character."); 
     valid = false; 
    } 
    String space = "(.*[ ].*)"; 
    if(password.matches(space)){ 
     System.out.println("Password cannot contain a space."); 
     valid = false; 
    } 
    if(password.startsWith("?")){ 
     System.out.println("Password cannot start with '?'."); 
     valid = false; 

    } 
    if(password.startsWith("!")){ 
     System.out.println("Password cannot start with '!'."); 
     valid = false; 
    } 
    if(valid){ 
     System.out.println("Password is valid."); 
    } 
} 

があるさ問題は、それは私が欲しいものではないパスワードを確認するように頼むでしょう。

+0

非英数字の場合は '[^ A-Za-z0-9]'を使用できます。 –

+0

は、passCheckからパスワードの有効性(たとえばブール値)を返します。したがって、メインでは、続行する前にブール値をテストできます。 –

+0

パスワードにスペース、疑問符、および感嘆符が含まれているパスワードが強すぎます。 – tbodt

答えて

0

パスワードが無効である場合、

にこの上で私のテイクをパスワードを繰り返すユーザーのための必要はありません。

System.out.print("Password : "); 
    inputPassword = input.next(); 


    if(passCheck(inputPassword)) 
    { 
    System.out.print("Please confirm your password : "); 
    confirmPassword = input.next(); 


      if(inputPassword.matches(confirmPassword)){ 
      System.out.println("Password successfully created."); 
      } else { 
      System.out.println("Passwords do not match."); 
      } 
    } 
    else {....} 

.......

編集:私はあなたの方法のpassCheckの戻り値の型がvoidであることに気づきました。 main()で次に

public static boolean passCheck(String password){ 
    // ... 
    if(valid){ 
     System.out.println("Password is valid."); 
    } 

    return valid; 
} 

あなたはその戻り値と終了を確認することができます:あなたはbooleanにごpassCheck()メソッドの戻り値の型を変更し、最後にそのローカルvalid変数の値を返すことができ

+0

最後にelseを指定すると、ifがifの上にあるときに 'if'を除いて 'else'とエラーが表示されます。 – Zeiryuu

+0

申し訳ありませんが、 – john

+0

の末尾にあるセミコロンも削除してください。私の答えに満足すればチェックボタンをクリックしてください。もっと助けが必要なのかどうか分かります – john

0

をブールすることを変更してみてくださいすぐに、パスワードが無効である場合、確認パスワードを尋ねることなく。

//... 
// ask for password 
System.out.print("Password : "); 
inputPassword = input.next(); 
if(!passCheck(inputPassword)) { 
    return; 
} 
0

まず、パスワードが正しい形式でない場合、コードを破損するようには決して言わないでください。私が提案したいのは、passCheck()メソッドの戻り値の型をbooleanに変更し、最後に

return valid; 

を追加することです。その後

、それが一致するまで継続など、パスワードの入力を求めるためにDO-whileループを使用します。

do{ 
    System.out.print("Password : "); 
    inputPassword = input.next(); 
}while(!passCheck(inputPassword)); 

これは、パスワードが正しい形式になるまで、プログラムは継続していないことを確認します。

関連する問題