[英]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!rd
和C0nsideredAgoodPassword
一個很好的密碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.