So I wrote a method that makes the user enter a password and this password must pass the following specs:
1. Be at least 8 digits long
2. Have an uppercase
3. Have a lowercase
4. Have special digit
I'm not sure as to why when I input it, the output doesn't account for the special Character and throws an error.
Here is my code so far:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Please enter a given password : ");
String passwordhere = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String confirmhere = in.nextLine();
System.out.println("your password is: " + passwordhere);
while (!passwordhere.equals(confirmhere) || !isValid(passwordhere)) {
System.out.println("The password entered here is invalid");
System.out.print("Please enter the password again.it must be valid : ");
String Passwordhere = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
}
}
public static boolean isValid(String passwordhere) {
if (passwordhere.length() < 8) {
return false;
} else {
for (int p = 0; p < passwordhere.length(); p++) {
if (Character.isUpperCase(passwordhere.charAt(p))) {
}
}
for (int q = 0; q < passwordhere.length(); q++) {
if (Character.isLowerCase(passwordhere.charAt(q))) {
}
}
for (int r = 0; r < passwordhere.length(); r++) {
if (Character.isDigit(passwordhere.charAt(r))) {
}
}
for (int s = 0; s < passwordhere.length(); s++) {
if (Character.isSpecialCharacter(passwordhere.charAt(s))) {
}
}
return true;
}
}
Also, another problem is for example, lets say the user enter bob123
as their password.
How can I get the loop to tell the user what It needs to be a correct password?
On the example above it is missing a Capital Letter and a symbol(*&^..etc).
How can I add this to print out each time the user makes a password and until they get the right password to pass all specs of the code?
You should have clearly mention your requirement I was not aware of your requirement. Please find my below solution`
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Please enter a given password : ");
String passwordhere = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
String confirmhere = in.nextLine();
List<String> errorList = new ArrayList<String>();
while (!isValid(passwordhere, confirmhere, errorList)) {
System.out.println("The password entered here is invalid");
for (String error : errorList) {
System.out.println(error);
}
System.out.print("Please enter a given password : ");
passwordhere = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
confirmhere = in.nextLine();
}
System.out.println("your password is: " + passwordhere);
}
public static boolean isValid(String passwordhere, String confirmhere, List<String> errorList) {
Pattern specailCharPatten = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Pattern UpperCasePatten = Pattern.compile("[A-Z ]");
Pattern lowerCasePatten = Pattern.compile("[a-z ]");
Pattern digitCasePatten = Pattern.compile("[0-9 ]");
errorList.clear();
boolean flag=true;
if (!passwordhere.equals(confirmhere)) {
errorList.add("password and confirm password does not match");
flag=false;
}
if (passwordhere.length() < 8) {
errorList.add("Password lenght must have alleast 8 character !!");
flag=false;
}
if (!specailCharPatten.matcher(passwordhere).find()) {
errorList.add("Password must have atleast one specail character !!");
flag=false;
}
if (!UpperCasePatten.matcher(passwordhere).find()) {
errorList.add("Password must have atleast one uppercase character !!");
flag=false;
}
if (!lowerCasePatten.matcher(passwordhere).find()) {
errorList.add("Password must have atleast one lowercase character !!");
flag=false;
}
if (!digitCasePatten.matcher(passwordhere).find()) {
errorList.add("Password must have atleast one digit character !!");
flag=false;
}
return flag;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With