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锚点及其他“零长度断言”
java正则表达式校验密码必须是包含大小写字母、数字、特殊符号的8位以上组合的更多相关文章
- Java随机获取32位密码且必须包含大小写字母、数字和特殊字符,四种的任意三种
Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种 Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种,代码如下: import java.ut ...
- js验证:密码只能为大写字母+小写字母+数字的8至15位字符组合
var reg = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{8,15}$/; // alert(password); if(reg.test(pa ...
- iOS开发-通过正则表达式进行各种判断银行卡,车牌号,邮箱地址,QQ,身份证,全字母,仅输入字母或数字同时包含大小写字母和数字,仅能输入中文等
/* * 验证银行卡号是否正确 * 车牌号验证 * 检验邮箱地址是否正确 * 手机号中间四位密文显示 * 判断QQ号是否正确(5-11位) * 判断身份证号是否正确(如末位为字母请用“x” ...
- Python 使用正则表达式验证密码必须包含大小写字母和数字
校验密码是否合法的程序. 输入一个密码 1.长度5-10位 2.密码里面必须包含,大写字母.小写字母和数字 3.最多输入5次 ===================================== ...
- js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“
js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...
- JAVA正则表达式校验qq号码
/* * 校验qq号码* 要求必须是5-15位* 0不能开头* 必须都是数字 */ (1)使用正则表达式校验qq号码 (2)方式2
- Java正则表达式校验QQ号码和邮箱地址格式
public class Demo02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ...
- python习题-产生8位随机密码要包含大小写及数字
# 1.写一个产生密码的程序,# 输入次数,输入多少次就产生多少条数据,# 要求密码必须包含大写字母.小写字母和数字,长度8位,不能重复 #需求分析#1.循环,输入什么就循环多少次#2.随机来取值,是 ...
- PHP随机生成要求位数个字符(大小写字母+数字)
php随机生成要求位数个字符 /** * 随机生成要求位数个字符 * @param length 规定几位字符 */ function getRandChar($length){ $str = nul ...
随机推荐
- Java中四种遍历Map对象的方法
方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...
- 3_03_MSSQL课程_Ado.Net_数据导入
数据库数据导出和导入 思路: --思路: 1.找到文件 2.读取文件 3.第一行 忽略 4.insert using System; using System.Collections.Generic; ...
- LeetCode 876. Middle of the Linked List(获得链表中心结点)
题意:获得链表中心结点.当有两个中心结点时,返回第二个. 分析:快慢指针. /** * Definition for singly-linked list. * struct ListNode { * ...
- Color Space 和 Color Range
颜色有两个属性Color Range和Color Space 有关Color Space的解释可以看下面两个链接: https://www.jianshu.com/p/facdbab5ac20 htt ...
- JS操作网页中的iframe
/* *parent.html */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- 如何优雅地根治null值引起的Bug!
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- Hive的存储和MapReduce处理——数据清洗
日期:2019.11.13 博客期:115 星期三 Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) D ...
- Xcode Edit Schemes
关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...
- 【剑指Offer面试编程题】题目1503:二叉搜索树与双向链表--九度OJ
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个 ...
- CMake查找第三方库路径
问题 一直都有一个问题,就是基于Windows下使用CMake构建VS工程时,CMake是如何查找到第三方库所在的路径的呢? 答案 今天重新想起这个问题,就拿构建Vtk的VS工程测试了一下, 才发现是 ...