• 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,即只有最后一个密码是符合要求的

    参考:https://www.cnblogs.com/feynman61/p/9419640.html

  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/14958480.html
Copyright © 2020-2023  润新知