日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Regex正則表達式判斷密碼強度_正則表達式

作者:從南到北ss ? 更新時間: 2023-03-30 編程語言

需求

??最近在最做一個軟件的注冊登錄的功能,需要用到對密碼強度的判斷,并對當前輸入的密碼的強度進行輸出。需求里對密碼分了三級,分別是低強度、中強度、高強度,但是沒有對什么是低強度、什么是高強度進行詳細分類,所以自己在做的時候簡單做了下分類。對密碼分類后,我想到的是使用Regex表達式直接判斷密碼的強度,密碼字符串輸入然后輸出對應強度等級就行。

??這里用到Regex表達式,雖然還是經常使用,但是對其語法還是一知半解。主要一般用到都比較簡單,不需要多重判斷。在網上一番搜索后,基本沒有找到符合我要求的Regex表達式。雖然可以用if...else...進行進行分步判斷,但是對于我等強迫癥而言,能用一句代碼說明的事情絕對不寫第二句。所以還是頭疼了好一會的。大體看了下別人怎么寫的,簡單對照了下語法設計,然后開始著手自己的密碼強度判斷Regex表達式的書寫。

在線測試Regex

https://www.goregex.cn/

正文

密碼強度分類

??首先完成對密碼強度等級的分類。密碼為6-16位,分為低、中、高3個等級。密碼是大小寫字母,數字,英文標點的隨機組合。密碼強度等級對照表:

長度 描述 強度
6<=長度<=8 純數字
- 純數字
- 純字母
- 純英文標點
- 數字+字母
- 數字+標點
- 字母+標點
- 數字+字母+標點
9<=長度<=12 純數字
- 純字母
- 純英文標點
- 數字+字母
- 數字+標點
- 字母+標點
- 數字+字母+標點
13<=長度<=16 所有

Regex分析

??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判斷)

原文鏈接:https://www.cnblogs.com/younShieh/p/17082522.html

欄目分類
最近更新