前言
在申請使用者帳號時,常常會看到要求密碼內至少要幾個大寫、小寫與數字。若是我們自己開發的系統,要如何寫才能滿足所有條件?這時候就必須請出正規表示式 (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 判斷的功能。