[python] 用regular expression來驗證密碼長度與安全性
在申請使用者帳號時,常常會看到要求密碼內至少要幾個大寫、小寫與數字。
先訂定以下規則:
現在就用python來實現如何檢查吧!
直接上程式碼再解釋
現在就來仔細的解釋pattern
有(?= )的部分
先訂定以下規則:
- 至少有一個數字
- 至少有一個小寫英文字母
- 至少有一個大寫英文字母
- 密碼長度在6 ~ 20個字母之間
現在就用python來實現如何檢查吧!
直接上程式碼再解釋
import re pattern = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$" password = input("Enter string to test: ") result = re.findall(pattern, password) print(result) if (result): print("Valid password") else: print("Password not valid")regular expression找字串的原理關鍵是使用pattern,如上程式碼中的「 "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$"」,在利用re.findall看字串裡面有沒有符合pattern,若是有則符合安全性。
現在就來仔細的解釋pattern
pattern = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$"一堆符號看得眼花撩亂?我會拆成有(?= )的部分和沒有(?= )的部分來看
有(?= )的部分
- (?=.*\d):從頭(^)檢查此字串是否有數字(.*\d)
- (?=.*[a-z]):從頭(^)檢查此字串是否有小寫英文字母(.*[a-z])
- (?=.*[A-Z]):從頭(^)檢查此字串是否有小寫英文字母(.*[A-Z])
- ^.{6,20}$:若上述(?=)的條件都滿足,再來找從頭(^)到尾($)的字串長度是否在6至20之間
只要看得懂pattern到底在寫甚麼,要變化就非常容易!
留言
張貼留言