2016-03-22 6 views
0

Das Problem, das ich habe, ist die Wiederholung des ersten Passwort-Prozesses vor der Bestätigung des Passwortes.Java Password Checking

Das Passwort muss mindestens 8 Zeichen lang sein.

muss das Passwort mindestens enthalten:

  • ein Alphazeichen [a-zA-Z]
  • ein numerisches Zeichen [0-9]
  • ein Zeichen, die nicht alphanumerischen wie ! # @ $ %^& * () - _ = + [ ] ; : ' " , <.>/?

ist Das Passwort darf nicht:

  • Leerzeichen enthalten
  • mit einem Ausruf beginnen [!] oder ein Fragezeichen [?]

Hier ist der Code

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."); 
    } 
} 

Was ich bekomme, nachdem er mir sagt, einer der die Probleme, es wird gebeten, das Passwort zu bestätigen, das ist nicht was ich will.

+0

Sie könnten '[^ A-Za-z0-9]' für nicht-alphanumerische Zeichen verwenden. –

+0

geben Sie die Gültigkeit des Passworts (z. B. ein Boolescher Wert) von passCheck zurück. In main können Sie den Boolean testen, bevor Sie fortfahren. –

+0

Ein Kennwort mit Leerzeichen, Fragezeichen und Ausrufezeichen ist stärker als eines, das nicht. – tbodt

Antwort

0

, wenn das Passwort ungültig ist, ist es nicht erforderlich, dass der Benutzer das Passwort zu wiederholen

mein nehmen auf diese;

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

.......

edit: ich bemerkte, dass der Rückgabetyp Ihrer Methode passCheck nichtig ist. versuchen, dass

+0

Das else am Ende gibt mir einen Fehler, der 'else' ohne 'if' sagt, wenn das if darüber steht. – Zeiryuu

+0

Entschuldigung, entfernen Sie das Semikolon am Ende von wenn auch – john

+0

, klicken Sie auf das Kontrollkästchen, wenn Sie mit meiner Antwort zufrieden sind. Ich weiß, wenn Sie mehr Hilfe brauchen – john

0

Sie können Ihre passCheck() Methode Rückkehr Typ boolean ändern und geben den Wert seiner lokalen valid Variable am Ende boolean Wechsel:

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

    return valid; 
} 

Dann in main() können Sie den Rückgabewert überprüfen und beenden sofort, wenn das Passwort ungültig ist, ohne ein Bestätigungskennwort zu verlangen.

0

Zunächst einmal sagen Sie nie den Code zu brechen, wenn das Passwort nicht das richtige Format hat. Was würde ich vorschlagen, ist die Änderung des Rückgabetypen Ihres passCheck() -Methode boolean und das Hinzufügen von

return valid; 

bis zum Ende.

Verwenden Sie dann eine do-while-Schleife kontinuierlich nach dem Passwort zu fragen, bis sie paßt, wie zum Beispiel:

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

Dies wird bestätigen, dass das Programm nicht fortgesetzt, bis das Passwort das richtige Format ist.