Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種實(shí)例代碼
一、語(yǔ)法
字符 | 說(shuō)明 |
---|---|
\ | 將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符。例如, n匹配字符 n。\n 匹配換行符。序列 \\\\ 匹配 \\ ,\\( 匹配 (。 |
^ | 匹配輸入字符串開(kāi)始的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 還會(huì)與"\n"或"\r"之后的位置匹配。 |
$ | 匹配輸入字符串結(jié)尾的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,$ 還會(huì)與"\n"或"\r"之前的位置匹配。 |
* | 零次或多次匹配前面的字符或子表達(dá)式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。 |
+ | 一次或多次匹配前面的字符或子表達(dá)式。例如,"zo+"與"zo"和"zoo"匹配,但與"z"不匹配。+ 等效于 {1,}。 |
? | 零次或一次匹配前面的字符或子表達(dá)式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。 |
{n} | _n _是非負(fù)整數(shù)。正好匹配 n 次。例如,"o{2}"與"Bob"中的"o"不匹配,但與"food"中的兩個(gè)"o"匹配。 |
{n,} | _n _是非負(fù)整數(shù)。至少匹配 _n _次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。 |
{n,m} | m 和 n 是非負(fù)整數(shù),其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的頭三個(gè) o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能將空格插入逗號(hào)和數(shù)字之間。 |
? | 當(dāng)此字符緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后時(shí),匹配模式是"非貪心的"。"非貪心的"模式匹配搜索到的、盡可能短的字符串,而默認(rèn)的"貪心的"模式匹配搜索到的、盡可能長(zhǎng)的字符串。例如,在字符串"oooo"中,"o+?“只匹配單個(gè)"o”,而"o+“匹配所有"o”。 |
二、正則實(shí)戰(zhàn)
1、純字母
"[a-zA-Z]{1,}$"
2、純數(shù)字
"[0-9]{1,}$"
3、字母和數(shù)字組合
"((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$"
4、字母或數(shù)字
"[a-zA-Z0-9]+$"
5、字母、數(shù)字、下劃線,都可以
"\\w+$"
6、字母、數(shù)字、特殊符號(hào),至少匹配2種
/** * 假定設(shè)置密碼時(shí),密碼規(guī)則為: 字母、數(shù)字、特殊符號(hào),至少匹配2種 * 則密碼可能出現(xiàn)的情況有: * 1、數(shù)字+特殊符號(hào) * 2、字母+特殊符號(hào) * 3、字母+數(shù)字 * 4、字母+數(shù)字+特殊符號(hào) * (組合與順序無(wú)關(guān)) * 解決思路: * 1、遍歷字符串的字符數(shù)組,查看是否包含目標(biāo)特殊字符,若包含,則標(biāo)記字符串 * 包含特殊字符,并替換當(dāng)前特殊字符為''。 * 2、判斷剩下的字符組成的字符串,是否匹配以下情況 * - 純字母 * - 純數(shù)字 * - 字母+數(shù)字 * 3、字符串匹配規(guī)則 * 純字母+包含特殊字符 ---- 匹配通過(guò) * 純數(shù)字+包含特殊字符 ---- 匹配通過(guò) * 字母+數(shù)字+包含個(gè)數(shù)字符 ---- 匹配通過(guò) */ //特殊字符 public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~"; // 純字母 public static final String character = "[a-zA-Z]{1,}$"; // 純數(shù)字 public static final String numberic = "[0-9]{1,}$"; // 字母和數(shù)字 public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" + "|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$"; // 字母或數(shù)字 public static final String number_or_character = "[a-zA-Z0-9]+$"; // 字母數(shù)字下劃線 public static final String ncw = "\\w+$"; public static boolean checkPassword(String targetString) { String opStr = targetString; boolean isLegal = false; boolean hasSpecChar = false; char[] charArray = opStr.toCharArray(); for (char c : charArray) { if (SPEC_CHARACTERS.contains(String.valueOf(c))) { hasSpecChar = true; // 替換此字符串 opStr = opStr.replace(c, ' '); } } String excSpecCharStr = opStr.replace(" ", ""); boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches(); boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches(); boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches(); isLegal = ((isPureNum && hasSpecChar) || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar; System.out.println("字符串:" + targetString + ",是否符合規(guī)則:" + isLegal); System.out.println("---------------"); return isLegal; } public static void main(String[] args) { checkPassword("fasdagd"); checkPassword("41234123"); checkPassword("#$%^&&*("); checkPassword("fasd$$"); checkPassword("41234%%%"); checkPassword("fasd41^(324"); checkPassword("fa413%^&*"); checkPassword("&%fa413%^&*"); }
測(cè)試結(jié)果:
附:密碼中允許出現(xiàn)數(shù)字、大寫字母、小寫字母,但至少包含其中2種且長(zhǎng)度在8-16之間(三種符號(hào)任取其二)
- 包含三種符號(hào)中的一種符號(hào),無(wú)效。
- 包含三種符號(hào)中的二種符號(hào),有效。
- 包含三種符號(hào)中的三種符號(hào),有效。
正向否定方式:
^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$
- (?![\d]+$):正向否定查找。匹配向后直到結(jié)尾均為數(shù)字的字符。
- ^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$):匹配向后直到結(jié)尾既不是純數(shù)字,又不是純消息字母,又不是純大寫字母的開(kāi)始字符。
console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("abcdefgh")); false console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("abcdefgH")); true console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("abcdefg8")); true console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("abcdefG8")); true console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("12345678")); false console> console.log(/^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/g.test("12345678a")); true
這個(gè)表達(dá)式也可以實(shí)現(xiàn)相同的功能
^(?!^(\d+|[a-z]+|[A-Z]+)$)[\da-zA-Z]{8,16}$
- ^(\d+|[a-z]+|[A-Z]+)$:從頭到尾要么是純數(shù)字,要么是純小寫字母,要么是純大寫字母。
- ^(?!^(\d+|[a-z]+|[A-Z]+)$):匹配向后直到結(jié)尾既不是純數(shù)字,又不是純消息字母,又不是純大寫字母的開(kāi)始字符。
總結(jié)
到此這篇關(guān)于Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種的文章就介紹到這了,更多相關(guān)Java正則校驗(yàn)密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java微信公眾號(hào)開(kāi)發(fā)(搭建本地測(cè)試環(huán)境)
這篇文章主要介紹了java微信公眾號(hào)開(kāi)發(fā),主要內(nèi)容有測(cè)試公眾號(hào)與本地測(cè)試環(huán)境搭建,需要的朋友可以參考下2015-12-12Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言如何實(shí)現(xiàn)查找文件和替換文件內(nèi)容功能,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-08-08Java中Https發(fā)送POST請(qǐng)求[親測(cè)可用]
這篇文章主要介紹了Java中Https發(fā)送POST請(qǐng)求[親測(cè)可用],本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05Java與Node.js利用AES加密解密出相同結(jié)果的方法示例
這篇文章主要介紹了Java與Node.js利用AES加密解密出相同結(jié)果的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,需要的朋友們下面來(lái)一起看看吧。2017-02-02基于@AllArgsConstructor與@Value共用的問(wèn)題解決
這篇文章主要介紹了基于@AllArgsConstructor與@Value共用的問(wèn)題解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法
這篇文章主要介紹了詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解
這篇文章主要介紹了FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解,需要的朋友可以參考下2017-08-08