前言
在申請使用者帳號時,常常會看到要求密碼內至少要幾個大寫、小寫與數字。若是我們自己開發的系統,要如何寫才能滿足所有條件?這時候就必須請出正規表示式 (regular expression 也稱為 regex)。
訂定密碼原則
在寫程式之前,需把所有的限制都先條列出來,避免遺漏或理解錯誤
- 至少有 1 個數字
- 至少有 1 個小寫英文字母
- 至少有 1 個大寫英文字母
- 密碼長度在 6 ~ 20 個字母之間
Python 實現
現在就用 Python
來實現檢查密碼的功能吧!直接上程式碼再解釋
1 | import re |
regular expression
找字串的原理關鍵是使用 pattern
,如上程式碼中的 "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$"
,再使用 re.findall
查看字串裡面有沒有符合 pattern
,若是有符合 pattern
,則等同符合密碼原則。
仔細解析一下 pattern
1 | pattern = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$" |
一堆符號看得眼花撩亂?我會拆成有 (?=)
的部分和沒有 (?=)
的部分來看
- 有
(?=)
的部分^(?=.*\d)
:從頭 (^
) 檢查此字串是否有數字 (.*\d
)。^(?=.*[a-z])
:從頭 (^
) 檢查此字串是否有小寫英文字母 (.*[a-z]
)。^(?=.*[A-Z])
:從頭 (^
) 檢查此字串是否有小寫英文字母 (.*[A-Z]
)。
- 沒有
(?=)
的部分^.{6,20}$
:若上述(?=)
的條件都滿足,再來找從頭 (^
) 到尾 ($
) 的字串長度是否在 6 至 20 之間。
結論
正規表示式是非常好用的字串查找、檢查的工具,只要理解如何寫 pattern
,就能寫出各種難以用 if else
判斷的功能。