如何利用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


猜你喜欢
- 可能是由于Django使用的MySQLdb库对Python3不支持,我们用采用了PyMySQL库来代替,导致出现各种坑,特别是执行以下2条命
- 一、使用多个setting文件 开发Django项目是最常见,也是最麻烦的一个问题就是如何区分开发配置与线上配置。有一些解决方案是
- 从MySQL 5.0.2开始,通过mysql_stmt_attr_set() C API函数实现了服务器端光标。服务器端光标允许在服务器端生
- 有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例
- 背景:Email地址存于MSSql一用户信息表中,数量上万。公司自有服务器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多种服
- 前言如果我们和面试官聊到事务的问题,怎么回答呢?先说下事务是什么,因为我们业务是比较复杂的,不可能一个sql就能解决的,涉及多个sql就组成
- 最近写一个和二维列表有关的算法时候发现的当用max求二维列表中最大值时,输出的结果是子列表首元素最大的那个列表测试如下c=[[1,2,-1]
- 一、介绍模块最小开发框架:基于python 的Pygame最小开发框架1、Pygame和sys模块import pygame #制
- 一、绘制线性图形执行如下代码import matplotlib.pyplot as pltdataX=[1,2,3,4]dataY=[2,4
- 客户端: <%@ Page Language="C#" AutoEventWireup="true&qu
- 本文记录了mysql 8.0.22 安装配置图文教程,供大家参考,具体内容如下一、安装(1)、官网下载(2)、安装(前提是之前没安装过mys
- 1.在html页面中导入js文件和css文件<link rel="stylesheet" href=".
- 混淆矩阵 混淆矩阵(Confusion Matrix)是机器学习中用来总结分类模型预测结果的一
- 有时候使用Pytorch训练完模型,在测试数据上面得到的结果令人大跌眼镜。这个时候需要检查一下定义的Model类中有没有 BN 或 Drop
- 本文实例分析了Python中的对象,方法,类,实例,函数用法。分享给大家供大家参考。具体分析如下:Python是一个完全面向对象的语言。不仅
- 最近在研究python调度框架APScheduler使用的路上,那么今天也算个学习笔记吧!# coding=utf-8""
- 本篇文章主要介绍了python OpenCV学习笔记之绘制直方图的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来
- 这几天接到一个需求需要吧不同系统的数据库进行同步,需要我做一个中间平台进行连接,瞬间就想到了触发器调用接口然后通过API进行传递再写入另一个
- 在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持。可在编译时使用 –disable-CLI。一旦编
- 1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要