使用java中的正则表达式检查字符串是否以两个不同的数字结尾



我必须创建一个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

相关内容

最新更新