如何利用Java正則表達(dá)式校驗(yàn)密碼規(guī)則
密碼規(guī)則:
- 它至少包含 8 個(gè)字符,最多包含 20 個(gè)字符。
- 它至少包含一個(gè)數(shù)字。
- 它至少包含一個(gè)大寫(xiě)字母。
- 它至少包含一個(gè)小寫(xiě)字母。
- 它至少包含一個(gè)特殊字符,其中包括 !@#$%&*()-+=^。
- 它不包含任何空白區(qū)域
正則表達(dá)式
String rex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,20}$";
說(shuō)明:
- ^表示字符串的起始字符。
- (?=.*[0-9]) 表示一個(gè)數(shù)字必須至少出現(xiàn)一次。
- (?=.*[a-z]) 表示小寫(xiě)字母表必須至少出現(xiàn)一次。
- (?=.*[A-Z]) 表示必須至少出現(xiàn)一次的大寫(xiě)字母。
- (?=.*[@#$%^&-+=()] 表示必須至少出現(xiàn)一次的特殊字符。
- (?=\S+$) 整個(gè)字符串中不允許使用空格。
- .{8, 20}表示至少 8 個(gè)字符,最多 20 個(gè)字符。
- $表示字符串的末尾。
使用方法:
通過(guò)Java的Pattern.matches()方法進(jìn)行匹配,如果給定的密碼符合條件,返回true,否則返回false
public static void main(String[] args) { //密碼至少包含:大小寫(xiě)英文字母、數(shù)字、特殊符號(hào),密碼長(zhǎng)度大于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 }
補(bǔ)充:java正則校驗(yàn)密碼
長(zhǎng)度不少于8位且至少包含大寫(xiě)字母、小寫(xiě)字母、數(shù)字和特殊符號(hào)中的四種組合 或者 其中任意三種組合
一、排除法和詳細(xì)解釋
1、排除大寫(xiě)字母、小寫(xiě)字母、數(shù)字、特殊符號(hào)中1種組合、2種組合、3種組合,那么就只剩下4種都包含的組合了
2、表達(dá)式為:^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$
3、拆分解釋?zhuān)浩渲校?)-(6)運(yùn)用了零寬斷言、環(huán)視等正則功能
?。?)^匹配開(kāi)頭
?。?)(?![A-Za-z0-9]+$)匹配后面不全是(大寫(xiě)字母或小寫(xiě)字母或數(shù)字)的位置,排除了(大寫(xiě)字母、小寫(xiě)字母、數(shù)字)的1種2種3種組合
(3)(?![a-z0-9\\W]+$)同理,排除了(小寫(xiě)字母、數(shù)字、特殊符號(hào))的1種2種3種組合
(4)(?![A-Za-z\\W]+$)同理,排除了(大寫(xiě)字母、小寫(xiě)字母、特殊符號(hào))的1種2種3種組合
?。?)(?![A-Z0-9\\W]+$)同理,排除了(大寫(xiě)字母、數(shù)組、特殊符號(hào))的1種2種3種組合
(6)[a-zA-Z0-9\\W]匹配(小寫(xiě)字母或大寫(xiě)字母或數(shù)字或特殊符號(hào))因?yàn)榕懦松厦娴慕M合,所以就只剩下了4種都包含的組合了
(7){8,}8位以上
?。?)$匹配字符串結(jié)尾
二、測(cè)試代碼
public class PasswordTest { // 密碼長(zhǎng)度不少于8位且至少包含大寫(xiě)字母、小寫(xiě)字母、數(shù)字和特殊符號(hào)中的四種 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,}$"; // 密碼長(zhǎng)度8-20位且至少包含大寫(xiě)字母、小寫(xiě)字母、數(shù)字或特殊符號(hào)中的任意三種 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"; //全部大寫(xiě) String password2 = "abcdefghig"; //全部小寫(xiě) String password3 = "0123456789"; //全部數(shù)字 String password4 = "!@#$%^&*()"; //全部特殊字符 String password5 = "ABCDEabcde"; //大寫(xiě)和小寫(xiě) String password6 = "ABCDE01234"; //大寫(xiě)和數(shù)字 String password7 = "ABCDE!@#$%"; //大寫(xiě)和特殊字符 String password8 = "abcde01234"; //小寫(xiě)和數(shù)字 String password9 = "abcde!@#$%"; //小寫(xiě)字母和特殊字符 String password10 = "01234!@#$%"; //數(shù)字和特殊字符 String password11 = "Aa4!"; //長(zhǎng)度不夠8位數(shù) 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"); } }
總結(jié)
到此這篇關(guān)于如何利用Java正則表達(dá)式校驗(yàn)密碼規(guī)則的文章就介紹到這了,更多相關(guān)Java正則校驗(yàn)密碼規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Java中ConcurrentHashMap的存儲(chǔ)流程
ConcurrentHashMap技術(shù)在互聯(lián)網(wǎng)技術(shù)使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在ConcurrentHashMap技術(shù)的使用和原理方面對(duì)小伙伴們進(jìn)行360°的刁難,本文詳細(xì)給大家介紹一下ConcurrentHashMap的存儲(chǔ)流程,需要的朋友可以參考下2023-05-05Spring源碼之循環(huán)依賴(lài)之三級(jí)緩存詳解
這篇文章主要為大家詳細(xì)介紹了Spring源碼之循環(huán)依賴(lài)之三級(jí)緩存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法
微服務(wù)架構(gòu)中多數(shù)據(jù)源切換是個(gè)常見(jiàn)的需求,Spring Boot 提供了強(qiáng)大的支持來(lái)簡(jiǎn)化這一過(guò)程.本文給大家介紹了SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法,需要的朋友可以參考下2024-11-11Spring-Security實(shí)現(xiàn)登錄接口流程
Security?是?Spring?家族中的一個(gè)安全管理框架,SpringSecurity的原理其實(shí)就是一個(gè)過(guò)濾器鏈,內(nèi)部包含了提供各種功能的過(guò)濾器,這篇文章主要介紹了Spring-Security實(shí)現(xiàn)登錄接口,需要的朋友可以參考下2023-05-05RequestContextHolder.getRequestAttributes()空指針問(wèn)題及解決
這篇文章主要介紹了RequestContextHolder.getRequestAttributes()空指針問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01java程序員如何編寫(xiě)更好的單元測(cè)試的7個(gè)技巧
測(cè)試是開(kāi)發(fā)的一個(gè)非常重要的方面,可以在很大程度上決定一個(gè)應(yīng)用程序的命運(yùn)。良好的測(cè)試可以在早期捕獲導(dǎo)致應(yīng)用程序崩潰的問(wèn)題,但較差的測(cè)試往往總是導(dǎo)致故障和停機(jī)。本文主要介紹java程序員編寫(xiě)更好的單元測(cè)試的7個(gè)技巧。下面跟著小編一起來(lái)看下吧2017-03-03