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

 更新时间:2022年09月30日 10:49:01   作者:有错误先debug  
正则表达式正则表达式是用来指定字符串模式的,可以方便的处理文本信息,这篇文章主要给大家介绍了关于如何利用Java正则表达式校验密码规则的相关资料,需要的朋友可以参考下

密码规则:

  • 它至少包含 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");
    }
}

总结

到此这篇关于如何利用Java正则表达式校验密码规则的文章就介绍到这了,更多相关Java正则校验密码规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Java中ConcurrentHashMap的存储流程

    浅析Java中ConcurrentHashMap的存储流程

    ConcurrentHashMap技术在互联网技术使用如此广泛,几乎所有的后端技术面试官都要在ConcurrentHashMap技术的使用和原理方面对小伙伴们进行360°的刁难,本文详细给大家介绍一下ConcurrentHashMap的存储流程,需要的朋友可以参考下
    2023-05-05
  • 初识Java设计模式适配器模式

    初识Java设计模式适配器模式

    这篇文章主要为大家详细介绍了Java设计模式适配器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Spring源码之循环依赖之三级缓存详解

    Spring源码之循环依赖之三级缓存详解

    这篇文章主要为大家详细介绍了Spring源码之循环依赖之三级缓存,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • SpringBoot中Druid连接池与多数据源切换的方法

    SpringBoot中Druid连接池与多数据源切换的方法

    微服务架构中多数据源切换是个常见的需求,Spring Boot 提供了强大的支持来简化这一过程.本文给大家介绍了SpringBoot中Druid连接池与多数据源切换的方法,需要的朋友可以参考下
    2024-11-11
  • 基于Java HashMap的死循环的启示详解

    基于Java HashMap的死循环的启示详解

    本篇文章是对Java HashMap的死循环进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Spring-Security实现登录接口流程

    Spring-Security实现登录接口流程

    Security 是 Spring 家族中的一个安全管理框架,SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器,这篇文章主要介绍了Spring-Security实现登录接口,需要的朋友可以参考下
    2023-05-05
  • RequestContextHolder.getRequestAttributes()空指针问题及解决

    RequestContextHolder.getRequestAttributes()空指针问题及解决

    这篇文章主要介绍了RequestContextHolder.getRequestAttributes()空指针问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • SpringSecurity概念及整合ssm框架的示例详解

    SpringSecurity概念及整合ssm框架的示例详解

    用户登录系统时我们协助 SpringSecurity 把用户对应的角色、权限组装好,同时把各个资源所要求的权限信息设定好,剩下的“登录验证”、“权限验证”等等工作都交给SpringSecurity,对SpringSecurity整合ssm框架相关知识感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • java程序员如何编写更好的单元测试的7个技巧

    java程序员如何编写更好的单元测试的7个技巧

    测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。本文主要介绍java程序员编写更好的单元测试的7个技巧。下面跟着小编一起来看下吧
    2017-03-03
  • java工程师进阶之MyBatis延迟加载的使用

    java工程师进阶之MyBatis延迟加载的使用

    本文是java工程师进阶篇,主要介绍了java应用开发中MyBatis延迟加载及如何使用,有需要的朋友 可以借鉴参考下,希望能够有所帮助
    2021-09-09

最新评论