java正则表达式强密码

要求:

1.必须包含数字、大小写字母
2.密码位数在8-16位

    public static boolean checkPas(String pas) {
        Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$");
        Matcher matcher = pattern.matcher(pas);
        return matcher.matches();
    }

解释一下:

  • (?=.*\d) :表示必须包含数字
  • (?=.*[a-z]):表示必须包含小写字母
  • (?=.*[A-Z]):表示必须包含大写字母
  • .{8,16}:表示任意字符重复8-16次

需要注意的是为什么使用(?=.*\\d) 便可以保证一定会存在数字呢?

首先要知道?=表示的是零宽断言。?=ing即表示匹配以ing结尾的字符串。例如doing,便是匹配其中的do,注意并不会匹配ing。
(?=.*\\d)又代表什么意思呢?
匹配一个字符串,该字符串后接任意字符+数字。这个字符串实际上就是空字符串。因此在正则表达式"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$"中。
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])都表示匹配那样一个空字符串。也就意味着我们的密码必须包含数字、大小写字母。后续的.{8,16}则仅代表重复8到16次的任意字符。

你可能感兴趣的:(java正则表达式强密码)