[python] 用regular expression來驗證密碼長度與安全性

在申請使用者帳號時,常常會看到要求密碼內至少要幾個大寫、小寫與數字。

先訂定以下規則:

  1. 至少有一個數字
  2. 至少有一個小寫英文字母
  3. 至少有一個大寫英文字母
  4. 密碼長度在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到底在寫甚麼,要變化就非常容易!

留言

這個網誌中的熱門文章

[Hyper-V] 讓 Windows 可以吃到超過 16TB 的硬碟!