<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在最做一個軟體的註冊登入的功能,需要用到對密碼強度的判斷,並對當前輸入的密碼的強度進行輸出。需求裡對密碼分了三級,分別是低強度、中強度、高強度,但是沒有對什麼是低強度、什麼是高強度進行詳細分類,所以自己在做的時候簡單做了下分類。對密碼分類後,我想到的是使用Regex表示式直接判斷密碼的強度,密碼字串輸入然後輸出對應強度等級就行。
這裡用到Regex表示式,雖然還是經常使用,但是對其語法還是一知半解。主要一般用到都比較簡單,不需要多重判斷。在網上一番搜尋後,基本沒有找到符合我要求的Regex表示式。雖然可以用if...else...進行進行分步判斷,但是對於我等強迫症而言,能用一句程式碼說明的事情絕對不寫第二句。所以還是頭疼了好一會的。大體看了下別人怎麼寫的,簡單對照了下語法設計,然後開始著手自己的密碼強度判斷Regex表示式的書寫。
首先完成對密碼強度等級的分類。密碼為6-16位元,分為低、中、高3個等級。密碼是大小寫字母,數位,英文標點的隨機組合。密碼強度等級對照表:
長度 | 描述 | 強度 |
---|---|---|
6<=長度<=8 | 純數位 | 低 |
- | 純數位 | 低 |
- | 純字母 | 低 |
- | 純英文標點 | 低 |
- | 數位+字母 | 中 |
- | 數位+標點 | 中 |
- | 字母+標點 | 中 |
- | 數位+字母+標點 | 高 |
9<=長度<=12 | 純數位 | 中 |
- | 純字母 | 中 |
- | 純英文標點 | 中 |
- | 數位+字母 | 高 |
- | 數位+標點 | 高 |
- | 字母+標點 | 高 |
- | 數位+字母+標點 | 高 |
13<=長度<=16 | 所有 | 高 |
Regex表示式再複雜也逃不過最基礎的與或非關係,我們完全可以從這方面對複雜的Regex表示式進行拆分。
在此之前需要理解以下幾種符號的含義。
符號 | 描述 |
---|---|
^ | 匹配輸入字串的開始位置 |
$ | 匹配輸入字串的結束位置 |
. | 匹配除 "n" 之外的任何單個字元 |
* | 匹配前面的子表示式零次或多次 |
+ | 匹配前面的子表示式一次或多次 |
? | 匹配前面的子表示式零次或一次 |
d | 匹配一個數位字元。等價於[0-9] |
S | 匹配任何非空白字元 |
[xyz] | 字元種類。匹配⽅括號內的任意字元 |
(xyz) | 字元集,匹配與 xyz 完全相等的字串 |
[a-z] | 匹配 'a' 到 'z' 範圍內的任意小寫字母字元 |
(?=x) | 正向肯定預查詢包含x |
{4,8 | }匹配4到8位元長度的字元 |
| | 或運運算元 |
跳脫字元,⽤於匹配⼀些保留的字元{}.*+?^$| | |
[^x] | 匹配除了x以外的任意字元 |
拿低強度的密碼來說,首先需要滿足6-8位元,其次全是數位或全是字母或全是標點符號,只滿足這兩個條件的就是低強度的密碼。拆分開後就好實現了。
先看怎麼實現滿足6-8位元的表示式。
^S{6,8}$ //任何非空白字元,且滿足6-8位元
匹配都是數位的情況。
^d+$
匹配都是字母的情況。
^[A-Za-z]+$
匹配都是符號的情況。
^[!@#$%^&*?=]+$
拼接在一起,就是低強度密碼的正規表示式:
(?=^d+$|^[A-Za-z]+$|^[!@#$%^&*?=]+$)^S{6,8}$
匹配6-8位元同時包含數位+字母的情況。可以理解為包含數位、字母的字串,但不全是數位或不全是字母。
(?=.*d)(?=.*[A-Za-z])(?=^[dA-Za-z]+$)^S{6,8}$
匹配6-8位元同時包含數位+標點(!@#$=%^&*?)的情況。同上。
(?=.*d)(?=.*[!@#$=%^&*?])(?=^[d!@#$=%^&*?]+$)^S{6,8}$
匹配6-8位元同時包含字母+標點的情況。同上。
(?=.*[A-Za-z])(?=.*[!@#$%^&*?])(?=^[A-Za-z!@#$=%^&*?]+$)^S{6,8}$
然後再加上匹配9-12位元純數位,純字母,純標點的情況。與之前的寫法相同。
今天看了下專案中的註冊頁原始碼,順帶著看了下判斷密碼強度的正規表示式,寫的很好,最起碼比我寫的好,所以記錄下來留著以後參考
程式碼如下
var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$", "g") //強 var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g") //中 var enoughRegex = new RegExp("(?=.{6,}).*", "g") //弱
用input 的keyup() 方法每輸入一個字元用 正則的 enoughRegex.test(password) 方法去檢測密碼
本人之前也學過正規表示式的一點皮毛,下面從強到弱解釋下這三句正則的規則,如果有說的不對的地方歡迎大神拍磚,共同學習進步!
強 ==> 密碼長度大於等於8位元數 包含大寫字母[A-Z] + 小寫字母[a-z] + 數位[0-9] + 非單詞字元的特殊字元[標點符號,空格啥的這些] 結尾
中 ==> 密碼長度大於等於7位數 大寫字母[A-Z] + 小寫字母[a-z] 或者 大寫字母[A-Z] + 數位[0-9] 或者 小寫字母[a-z] + 數位[0-9] + 任意字元 結尾
弱 ==> 大於等於6位 任何字元或者數位 (如果達不到這個條件就是弱,所以這裡需要用false判斷)
到此這篇關於Regex正規表示式判斷密碼強度的文章就介紹到這了,更多相關正規表示式判斷密碼強度內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45