欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中的2種實(shí)例代碼

 更新時(shí)間:2022年08月02日 10:50:35   作者:CoreCmd  
正則表達(dá)式驗(yàn)證密碼功能在項(xiàng)目中經(jīng)常被使用到,但是很多朋友還是不大會(huì)使用密碼正則表達(dá)式進(jìn)行驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于Java正則校驗(yàn)密碼至少包含字母數(shù)字特殊符號(hào)中2種的相關(guān)資料,需要的朋友可以參考下

一、語(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ā)(搭建本地測(cè)試環(huán)境)

    這篇文章主要介紹了java微信公眾號(hào)開(kāi)發(fā),主要內(nèi)容有測(cè)試公眾號(hào)與本地測(cè)試環(huán)境搭建,需要的朋友可以參考下
    2015-12-12
  • Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容

    Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言如何實(shí)現(xiàn)查找文件和替換文件內(nèi)容功能,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • Java中Https發(fā)送POST請(qǐng)求[親測(cè)可用]

    Java中Https發(fā)送POST請(qǐng)求[親測(cè)可用]

    這篇文章主要介紹了Java中Https發(fā)送POST請(qǐng)求[親測(cè)可用],本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java與Node.js利用AES加密解密出相同結(jié)果的方法示例

    Java與Node.js利用AES加密解密出相同結(jié)果的方法示例

    這篇文章主要介紹了Java與Node.js利用AES加密解密出相同結(jié)果的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • Java程序包不存在的3種解決方法總結(jié)

    Java程序包不存在的3種解決方法總結(jié)

    包存在的,但是啟動(dòng)項(xiàng)目的時(shí)候提示包不存在,所以解決下,這篇文章主要給大家介紹了關(guān)于Java程序包不存在的3種解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 基于@AllArgsConstructor與@Value共用的問(wèn)題解決

    基于@AllArgsConstructor與@Value共用的問(wèn)題解決

    這篇文章主要介紹了基于@AllArgsConstructor與@Value共用的問(wèn)題解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java關(guān)鍵字final使用方法詳解

    java關(guān)鍵字final使用方法詳解

    在程序設(shè)計(jì)中,我們有時(shí)可能希望某些數(shù)據(jù)是不能夠改變的,這個(gè)時(shí)候final就有用武之地了。final是java的關(guān)鍵字,本文就詳細(xì)說(shuō)明一下他的使用方法
    2013-11-11
  • java中ThreadLocal的基本原理

    java中ThreadLocal的基本原理

    本文講解了java中ThreadLocal的一些基本原理,文中關(guān)于ThreadLocal的原理講解的非常詳細(xì),感興趣的朋友一起看看吧
    2021-08-08
  • 詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法

    詳解如何使用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-09
  • FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    這篇文章主要介紹了FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解,需要的朋友可以參考下
    2017-08-08

最新評(píng)論