Java密码检查

时间:2016-03-22 22:23:12

标签: java

我遇到的问题是在确认密码之前重复第一个密码过程。

  

密码长度必须至少为8个字符。

     

密码必须至少包含:

     
      
  • 一个字母字符[a-zA-Z]
  •   
  • 一个数字字符[0-9]
  •   
  • 一个不是字母或数字的字符,例如             ! # @ $ % ^ & * ( ) - _ = + [ ] ; : ' " , < . > / ?
  •   
     

密码不得:

     
      
  • 包含空格
  •   
  • 以感叹号[!]或问号[?]
  • 开头   

这是代码

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

我得到的是在它告诉我其中一个问题之后,它会要求确认密码,这不是我想要的。

3 个答案:

答案 0 :(得分: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的返回类型是无效的。尝试将其更改为布尔值

答案 1 :(得分:0)

您可以将passCheck()方法的返回类型更改为boolean,并在结尾处返回其本地valid变量的值:

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

    return valid;
}

然后在main()中,您可以检查其返回值并立即退出,如果密码无效,则无需确认密码。

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

答案 2 :(得分:0)

首先,如果密码格式不正确,您永远不会告诉代码中断。我建议将passCheck()方法的返回类型更改为boolean,并添加

return valid;

到最后。

然后,使用do-while循环连续询问密码,直到匹配为止:

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

这将确认在密码格式正确之前程序不会继续。