如何利用Java正则表达式校验密码规则

作者:有错误先debug 时间:2022-07-22 02:05:13 

密码规则:

  • 它至少包含 8 个字符,最多包含 20 个字符。

  • 它至少包含一个数字。

  • 它至少包含一个大写字母。

  • 它至少包含一个小写字母。

  • 它至少包含一个特殊字符,其中包括 !@#$%&*()-+=^。

  • 它不包含任何空白区域

正则表达式

String rex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,20}$";

说明:

  • ^表示字符串的起始字符。

  • (?=.*[0-9]) 表示一个数字必须至少出现一次。

  • (?=.*[a-z]) 表示小写字母表必须至少出现一次。

  • (?=.*[A-Z]) 表示必须至少出现一次的大写字母。

  • (?=.*[@#$%^&-+=()] 表示必须至少出现一次的特殊字符。

  • (?=\S+$) 整个字符串中不允许使用空格。

  • .{8, 20}表示至少 8 个字符,最多 20 个字符。

  • $表示字符串的末尾。

使用方法:

通过Java的Pattern.matches()方法进行匹配,如果给定的密码符合条件,返回true,否则返回false

public static void main(String[] args) {
       //密码至少包含:大小写英文字母、数字、特殊符号,密码长度大于8位,小于20位
       String password = "sAAAsasdadsadsa12&_";
       String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,20}$";
       boolean matches = Pattern.matches(regex, password);
       System.out.println(matches);//true
   }

补充:java正则校验密码

长度不少于8位且至少包含大写字母、小写字母、数字和特殊符号中的四种组合 或者 其中任意三种组合

一、排除法和详细解释

1、排除大写字母、小写字母、数字、特殊符号中1种组合、2种组合、3种组合,那么就只剩下4种都包含的组合了

2、表达式为:^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$

3、拆分解释:其中(2)-(6)运用了零宽断言、环视等正则功能

(1)^匹配开头

(2)(?![A-Za-z0-9]+$)匹配后面不全是(大写字母或小写字母或数字)的位置,排除了(大写字母、小写字母、数字)的1种2种3种组合

(3)(?![a-z0-9\\W]+$)同理,排除了(小写字母、数字、特殊符号)的1种2种3种组合

(4)(?![A-Za-z\\W]+$)同理,排除了(大写字母、小写字母、特殊符号)的1种2种3种组合

(5)(?![A-Z0-9\\W]+$)同理,排除了(大写字母、数组、特殊符号)的1种2种3种组合

(6)[a-zA-Z0-9\\W]匹配(小写字母或大写字母或数字或特殊符号)因为排除了上面的组合,所以就只剩下了4种都包含的组合了

(7){8,}8位以上

(8)$匹配字符串结尾

二、测试代码

public class PasswordTest {
   // 密码长度不少于8位且至少包含大写字母、小写字母、数字和特殊符号中的四种
   public static final String password1 = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$";
   // 密码长度8-20位且至少包含大写字母、小写字母、数字或特殊符号中的任意三种
   public static final String password = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_]+$)(?![a-z0-9]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,20}$";

public static void main(String[] args) {
       String password1 = "ABCDEFGHIG";  //全部大写
       String password2 = "abcdefghig";  //全部小写
       String password3 = "0123456789";  //全部数字
       String password4 = "!@#$%^&*()";  //全部特殊字符
       String password5 = "ABCDEabcde";  //大写和小写
       String password6 = "ABCDE01234";  //大写和数字
       String password7 = "ABCDE!@#$%";  //大写和特殊字符
       String password8 = "abcde01234";  //小写和数字
       String password9 = "abcde!@#$%";  //小写字母和特殊字符
       String password10 = "01234!@#$%"; //数字和特殊字符
       String password11 = "Aa4!";       //长度不够8位数
       String password12 = "ABCDE01234!@#$%"; //符合要求密码任意三种
       String password13 = "ABCDEabcde!@#$%"; //符合要求密码任意三种
       String password14 = "ABCDEabcde01234"; //符合要求密码任意三种
       String password15 = "abcde01234!@#$%"; //符合要求密码任意三种
       String password16= "ABCabc012@#"; //符合要求密码任意三种 和 符合全部的四种

System.out.println(password1.matches(password) + " 1");
       System.out.println(password2.matches(password)+ " 2");
       System.out.println(password3.matches(password)+ " 3");
       System.out.println(password4.matches(password)+ " 4");
       System.out.println(password5.matches(password)+ " 5");
       System.out.println(password6.matches(password)+ " 6");
       System.out.println(password7.matches(password)+ " 7");
       System.out.println(password8.matches(password)+ " 8");
       System.out.println(password9.matches(password)+ " 9");
       System.out.println(password10.matches(password)+ " 10");
       System.out.println(password11.matches(password)+ " 11");
       System.out.println(password12.matches(password)+ " 12");
       System.out.println(password13.matches(password)+ " 13");
       System.out.println(password14.matches(password)+ " 14");
       System.out.println(password15.matches(password)+ " 15");
       System.out.println(password16.matches(password)+ " 16");
   }
}

来源:https://blog.csdn.net/qq_42561919/article/details/125715378

标签:正则表达式,校验,密码规则
0
投稿

猜你喜欢

  • Python之reload流程实例代码解析

    2022-04-19 11:42:24
  • Pygame游戏开发之太空射击实战子弹与碰撞处理篇

    2022-05-24 03:59:19
  • javascript获取浏览器类型和版本的方法(js获取浏览器版本)

    2024-06-07 15:51:32
  • Python深拷贝与浅拷贝用法实例分析

    2023-11-06 01:25:04
  • Python编程使用matplotlib挑钻石seaborn画图入门教程

    2021-04-12 18:28:17
  • Asp.net中使用Sqlite数据库的方法

    2024-01-18 03:14:45
  • Python获取协程返回值的四种方式详解

    2023-10-03 15:13:21
  • vue和react等项目中更简单的实现展开收起更多等效果示例

    2024-05-29 22:47:35
  • 基于python+selenium的二次封装的实现

    2023-02-19 04:47:16
  • python删除文件、清空目录的实现方法

    2021-06-02 02:53:06
  • python编程webpy框架模板之def with学习

    2023-08-07 11:23:32
  • Python实现用户名和密码登录

    2022-02-17 13:49:49
  • 如何解决前端笔记本屏幕显示缩放比例125%,150%对页面布局的影响

    2024-04-29 13:11:36
  • python使用xlrd模块读写Excel文件的方法

    2022-02-14 16:54:55
  • python安装sklearn模块的方法详解

    2023-08-01 17:23:48
  • Vue + iView实现Excel上传功能的完整代码

    2024-05-29 22:43:13
  • Python抓取数据到可视化全流程的实现过程

    2021-06-14 02:03:28
  • vue前端开发keepAlive使用详解

    2024-05-02 16:33:52
  • JavaScipt中栈的实现方法

    2024-04-18 09:33:49
  • SQL中DATEADD和DATEDIFF的用法示例介绍

    2024-01-27 16:57:58
  • asp之家 网络编程 m.aspxhome.com