Reputation: 37
I must create a java program to check if the password is valid or not based on these conditions:
This is what I have written so far, and I want to know what's the regular expression to check the second condition (that the password must end with 2 different digits) ?
import java.util.Scanner;
public class PasswordValidation {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a password");
String password = sc.next();
if (isValid(password)) {
System.out.println("OK");
} else {
System.out.println("NO");
}
}
public static boolean isValid (String password) {
return password.matches ("^[A-Z](?=.*[a-z])(?=.*[!#$%&'()+-]).{5,12}$");
}
}
Upvotes: 0
Views: 411
Reputation: 521289
Try using this regex pattern:
^(?=.*[a-z])(?=.*[!"#$%&'()*+-])[A-Z].{2,9}(\d)(?!\1)\d$
Java code:
String password = "Apple$123";
if (password.matches("(?=.*[a-z])(?=.*[!\"#$%&'()*+-])[A-Z].{2,9}(\\d)(?!\\1)\\d")) {
System.out.println("MATCH");
}
This prints MATCH
.
Here is an explanation of the regex pattern:
^ from the start of the password
(?=.*[a-z]) assert that a lowercase letter be present
(?=.*[!"#$%&'()*+-]) assert that a special character be present
[A-Z] password starts with uppercase letter
.{2,9} followed by any 2 to 9 characters (total 5 to 12)
(\d) 2nd to last character is any digit
(?!\1)\d last character is any digit other than previous one
$ end of the password
Upvotes: 3