zoukankan      html  css  js  c++  java
  • java正则表达式校验密码必须是包含大小写字母、数字、特殊符号的8位以上组合

    一、需求:密码必须是包含大写字母、小写字母、数字、特殊符号(不是字母,数字,下划线,汉字的字符)的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 RegexTest {
    public static final String PW_PATTERN = "^(?![A-Za-z0-9]+$)(?![a-z0-9\W]+$)(?![A-Za-z\W]+$)(?![A-Z0-9\W]+$)[a-zA-Z0-9\W]{8,}$"; public static void main(String[] args) { String pw1 = "ABCDEFGHIG"; String pw2 = "abcdefghig"; String pw3 = "0123456789"; String pw4 = "!@#$%^&*()"; String pw5 = "ABCDEabcde"; String pw6 = "ABCDE01234"; String pw7 = "ABCDE!@#$%"; String pw8 = "abcde01234"; String pw9 = "abcde!@#$%"; String pw10 = "01234!@#$%"; String pw11 = "abcde01234!@#$%"; String pw12 = "ABCDE01234!@#$%"; String pw13 = "ABCDEabcde!@#$%"; String pw14 = "ABCDEabcde01234"; String pw15 = "Aa0!"; //符合要求密码 String pw16="ABCabc012!@#"; System.out.println(pw1.matches(PW_PATTERN)); System.out.println(pw2.matches(PW_PATTERN)); System.out.println(pw3.matches(PW_PATTERN)); System.out.println(pw4.matches(PW_PATTERN)); System.out.println(pw5.matches(PW_PATTERN)); System.out.println(pw6.matches(PW_PATTERN)); System.out.println(pw7.matches(PW_PATTERN)); System.out.println(pw8.matches(PW_PATTERN)); System.out.println(pw9.matches(PW_PATTERN)); System.out.println(pw10.matches(PW_PATTERN)); System.out.println(pw11.matches(PW_PATTERN)); System.out.println(pw12.matches(PW_PATTERN)); System.out.println(pw13.matches(PW_PATTERN)); System.out.println(pw14.matches(PW_PATTERN)); System.out.println(pw15.matches(PW_PATTERN)); System.out.println(pw16.matches(PW_PATTERN)); } }

    输出结果除最后一行外全是false,即只有最后一个密码是符合要求的

    五、参考:

      1、《精通正则表达式》第三版 P59用环视功能为数值添加逗号,P129锚点及其他“零长度断言”

      2、正则表达式30分钟入门教程

  • 相关阅读:
    Redis 连接命令
    Redis 脚本
    Redis 事务
    Redis 发布订阅
    Redis HyperLogLog
    Redis 有序集合(sorted set)
    Redis 集合(Set)
    Redis 列表(List)
    Redis 哈希(Hash)
    特定消费者的限制流量
  • 原文地址:https://www.cnblogs.com/feynman61/p/9419640.html
Copyright © 2011-2022 走看看