1. 程式人生 > 實用技巧 >正則表示式之密碼驗證

正則表示式之密碼驗證

要求

密碼長度 6-16 位,包含至少一個特殊字元,一個數字,一個大寫字母和一個小寫字母。

正則表示式

(?=^.{6,16}$)(?=(?:.*?\d){1})(?=.*[a-z])(?=(?:.*?[A-Z]){1})(?=(?:.*?[`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]){1})(?!.*\s)[0-9a-zA-Z`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]*$

解釋

規則 解釋
(?=^.{6,16}$) 密碼長度6-16,自己改變數字可以調節
(?=(?:.?[`·~!@#$%^&()_+}{:;'",<.>/?=\[\]\-\]){1}) 至少一個特殊字元
(?=(?:.*?\d){1}) 至少一個數字
(?=.*[a-z]) a-z的小寫字母
(?=(?:.*?[A-Z]){1}) 至少一個大寫字母

一些坑

  • 在做特殊字元處理這塊,因為涉及到有些字元比如 = [ ] - \ 這四個,需要在前面加 \ 進行轉義,才能正常正則識別出來。

  • 特殊字元匹配,後面這段必須也包含前面的匹配程式碼,即兩段 ``·~!@#$%^&*()_+}{|:;'",<.>/?=[]-\` 都相同:

    (?=(?:.*?[`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]){1})(?!.*\s)[0-9a-zA-Z`·~!@#$%^&*()_+}{|:;'",<.>/?\=\[\]\-\\]*$
    
  • 只支援英文狀態下的特殊字元,因為發現中文的 和英文的 - 是兩個字元。

正則表示式測試網站

參考

正則表示式驗證密碼強度

密碼強度正則表示式 – 必須包含大寫字母,小寫字母和數字,至少8個字元等