我遇到的问题是在确认密码之前重复第一个密码过程。
密码长度必须至少为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.");
}
}
我得到的是在它告诉我其中一个问题之后,它会要求确认密码,这不是我想要的。
答案 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));
这将确认在密码格式正确之前程序不会继续。