簡體   English   中英

密碼復雜性正則表達式與數字或特殊字符

[英]Password complexity regex with number or special character

我有一些正則表達式會檢查傳入密碼的復雜性要求。 然而,它不足以滿足我的需求。

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20})

它確保密碼符合最小長度,包含兩種情況的字符並包含一個數字。

但是我需要修改它,以便它可以包含數字和/或允許的特殊字符。 我甚至獲得了允許的特殊字符列表。

我有兩個問題,分隔特殊字符並使第一個條件執行和/或匹配數字或特殊。

我非常感謝這些部分中的一個正則表達神的建議。

允許的特殊字符是: @%+\\/'!#$^?:.(){}[]~-_

如果我理解你的問題,你正在尋找另一個特殊角色的可能性。 這可以按如下方式完成(參見最后一個預測):

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!§$%&/(/)]).{8,20})

請在regex101.com上查看此方法的演示。
但是,通過進一步的批准,你可以讓你的表達更好:點星( .* )帶你下線,然后回溯。 如果你有一個10個字符的密碼並且你想確定,需要完成四個前瞻,你需要至少 40個步驟(甚至更多,因為引擎需要回溯)。
要優化表達式,您可以使用與所需字符完全相反的方式,從而使引擎更快地結束。 此外,正如評論中已經指出的那樣,不要限制您的最大密碼長度。
在正則表達式的語言中,這將歸結為:

((?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[!§$%&/(/)]).{8,})

使用第一種方法, 需要63個步驟 ,而優化版本只需要29個步驟 (一半!)。 關於你的第二個問題,允許數字特殊字符,你可以簡單地使用交替( | ),如下所示:

((?:(?=\D*\d)|(?=.*[!§$%&/(/)]))(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,})

或者將\\d放在括號中,如下所示:

((?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[\d!§$%&/(/)]).{8,})

這個人會認為是ConsideredAgoodPassw!rdC0nsideredAgoodPassword一個很好的密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM