我必须创建一个java程序,根据以下条件检查密码是否有效:
- 至少5个字符长或最多12个字符长
- 以大写字母开头
- 以两个不同的数字结尾
- 至少包含以下字符中的一个特殊字符:"#$%&'((**-
- 至少包含一个小写字母
这是我到目前为止所写的内容,我想知道检查第二个条件(密码必须以两个不同的数字结尾(的正则表达式是什么?
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}$");
}
}
尝试使用以下正则表达式模式:
^(?=.*[a-z])(?=.*[!"#$%&'()*+-])[A-Z].{2,9}(d)(?!1)d$
Java代码:
String password = "Apple$123";
if (password.matches("(?=.*[a-z])(?=.*[!"#$%&'()*+-])[A-Z].{2,9}(\d)(?!\1)\d")) {
System.out.println("MATCH");
}
这将打印MATCH
。
以下是正则表达式模式的解释:
^ 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