97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

密碼驗證 : 密碼強度驗證

2020-3-18    前端達人

密碼強度驗證

需求

首先我們需要知道需求是什么? 這很重要!



要知道 我們寫的一切邏輯都是建立在需求之上



當輸入框聚焦時提示密碼要求



當密碼符合要求時 隱藏提示 并給予反饋



密碼等級低時 提示密碼等級為低



密碼等級一般時 提示密碼等級為中



密碼等級高時 提示密碼等級為高



當密碼不符合要求時 重新打開提示



思考如何構建函數
通過上面的需求 你能想到的函數時什么?你能想到的邏輯又是什么?

首先 提示的顯示隱藏我們可以用事件綁定或者事件監聽來做

其次 我們需要利用正則來判斷密碼等級

當密碼等級為低時 顯示紅色

當密碼等級為中時 顯示黃色

當密碼等級為高時 顯示綠色

最后 根據密碼等級來渲染頁面 也就是反饋給用戶的樣式

建議 :

在這里 盡量把每個函數的功能區分好 構思好

不僅要讓自己能看懂 還要讓別人能看懂

這樣的代碼才是好的代碼 可讀性更好 可維護性更高


實現功能 實現需求

HTML結構

在提示盒子的內部寫3個div 不同等級給予不同顏色不同數量的提示

 密碼 : <input type="text" id="ipt">
    <p id="p">請輸入6-20位的帶有數字字母或者特殊符號的密碼</p>
    <div class="box">
        <span></span>
        <div></div>
        <div></div>
        <div></div>
    </div>


點擊查看原圖



不管樣式行為再怎么花里胡哨 也一定要先把結構里要出現的元素寫出來



CSS樣式

由于考慮到等級分為三種 所以給提示盒子分3中不同的class類名

每一個類名對應的子元素的樣式也不同

到js部分我們只需要操作class類名就可以了

   <style>
        *{
            margin : 0 ;
            padding : 0 ;
        }
        //提示盒子
        .box{
            position : absolute;
            top : 2px;
            left : 200px;
        }
        .box div,
        .box span{
            margin-right : 5px;
            width : 20px;
            height : 20px;
            float : left;
        }
        //低等級
        .box.low :nth-child(2){
            background : red;
        }
        //中等級
        .box.middle div{
            background : yellow;
        }
        .box.middle :last-child{
            background: #fff;
        }
        //高等級
        .box.high div{
            background : green;
        }
        //提示文字默認隱藏
        p{
            display : none;
        }
    </style>



20200315203557273.png

JS行為

 <script>
        //獲取需要操作的元素
        let ipt = document.getElementById('ipt');
        let p = document.getElementById('p');
        let div = document.getElementsByClassName('box')[0];
        var tip = false; //聚焦顯示提示的開關
        //添加聚焦事件
        ipt.addEventListener('focus' , () => {
            //由于存在用戶輸入正確的密碼失焦再操作的可能 所以需要驗證開關
            if(!tip) {
                p.style.display = 'block';
            }
            //默認選中文字 提升用戶體驗
            ipt.select();
        })
        //添加輸入時的事件
        ipt.addEventListener('input' , () => {
            //拿到用戶輸入的密碼字符串
            let str = ipt.value;
            //當密碼不符合要求時 要及時給予反饋 及時清除樣式
            if(str.length < 6 ||str.length > 20 || /[^(\da-zA-Z\_\#\@\$\^\%\*\&\!\~\+\-)]/.test(str) || str === "") {
                p.style.display = 'block';
                removeClass(div);
                div.children[0].innerHTML = "";
                tip = true;
                //如果不符合要求 就沒必要判斷等級了 直接結束判斷
                return false;
            }else{
                p.style.display = 'none';
            }
            //判斷密碼等級
            let res = level(str);
            //根據等級添加樣式
            randerLevel(res);
        })
        //判斷密碼等級函數
        function level (str) {
            let level = 0;
            //當用戶輸入的字符串符合一定規則 讓等級+1
            if(/\d+/.test(str)) {
                level ++;
            }
            if(/[a-zA-Z]+/.test(str)) {
                level ++;
            }
            if(/[\_\#\@\$\^\%\*\&\!\~\+\-]+/.test(str)) {
                level ++;
            }
            return level;
        }
        //添加樣式函數
        function randerLevel (level) {
            //在添加樣式前先清空樣式
            removeClass(div);
            div.children[0].innerHTML = "";
            //根據等級添加對應的類名
            switch (level) {
                case 1 :
                    div.children[0].innerHTML = '低';
                    //元素存在不止一個類名 用 += 更好
                    div.className += ' low';
                    break;
                case 2 :
                    div.children[0].innerHTML = '中';
                    div.className += ' middle';
                    break;
                case 3 :
                    div.children[0].innerHTML = '高';
                    div.className += ' high';
                    break;
            }
        }
        //去等級類名函數
        function removeClass(ele){
            let reg = /low|middle|high/g;
            if(reg.test(ele.className)) {
                //不要忘記把值賦回去 replace返回的是新字符串
                ele.className = ele.className.replace(reg , "");
            }
        }
    </script>

當密碼等級為低時 給予紅色反饋

2020031520385174.png


  • 當密碼等級為中時 給予黃色反饋
    20200315203928450.png
  • 當密碼等級為高時 給予綠色反饋
    20200315203952860.png
  • 當密碼長度太短或太長時 不給予顏色反饋 給予文字反饋
20200315204030964.png


————————————————
版權聲明:本文為CSDN博主「豆漿不好喝」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_45178648/article/details/104885417

日歷

鏈接

個人資料

藍藍設計的小編 http://www.0391cbd.com

存檔

主站蜘蛛池模板: 精品久久人人爽人人玩人人妻| 在线欧美一区| 美女亚洲一区| 青青青草国产| 亚洲综合第一页| 日韩精品无码免费专网站| 色亚洲成人| 国产jizzjizz视频| 国产导航在线| 欧美亚洲另类在线观看| 97在线观看视频免费| 另类重口100页在线播放| 茄子视频毛片免费观看| jizz在线观看| 人妻中文久热无码丝袜| 成年看免费观看视频拍拍| 人妻无码AⅤ中文字| 无码福利日韩神码福利片| 午夜性刺激在线观看免费| 国产成人1024精品下载| 无码丝袜人妻| 亚洲精品国产成人7777| 国产亚洲精品自在久久不卡 | 日韩人妻少妇一区二区| 999国内精品视频免费| 一级毛片免费高清视频| 亚洲三级成人| 亚洲天堂在线视频| 免费看黄片一区二区三区| 日韩av电影一区二区三区四区| 亚洲男人的天堂网| 制服丝袜一区二区三区在线| 国产SUV精品一区二区| 日韩色图在线观看| yjizz国产在线视频网| www.亚洲一区| 免费jizz在线播放| 国产成人精品免费视频大全五级| av色爱 天堂网| 亚洲成a人片7777| 亚洲精品中文字幕午夜| 老司国产精品视频91| 人妻中文字幕无码久久一区| 91毛片网| 国产精品香蕉在线观看不卡| 国产精品99久久久久久董美香| 国产成人高清精品免费5388| 欧美特黄一级大黄录像| 最新国产精品第1页| 亚亚洲乱码一二三四区| 亚洲开心婷婷中文字幕| 大学生久久香蕉国产线观看| 午夜视频www| 超碰91免费人妻| 一本大道视频精品人妻| 中文字幕亚洲综久久2021| 欧美精品aⅴ在线视频| 99热最新在线| 精品久久久无码专区中文字幕| 狠狠v日韩v欧美v| 日韩精品久久无码中文字幕色欲| V一区无码内射国产| 欧美一级爱操视频| 中文国产成人精品久久| 国产欧美又粗又猛又爽老| 波多野结衣视频一区二区| 国产综合无码一区二区色蜜蜜| 综合人妻久久一区二区精品| 视频国产精品丝袜第一页| 全裸无码专区| 国产区人妖精品人妖精品视频| 婷婷综合在线观看丁香| 国内精自线i品一区202| 夜色爽爽影院18禁妓女影院| 国产欧美在线观看视频| 久久青草视频| 色综合热无码热国产| 色综合a怡红院怡红院首页| 91在线国内在线播放老师| 伊人久久精品无码麻豆精品 | 日韩美女福利视频| 免费不卡在线观看av|