2016-08-01 73 views
0

我試圖編寫正則表達式來驗證給定規則的密碼。用於給定規則組合的正則表達式

密碼的長度必須至少爲8個字符和包含以下4種類型的字符中的至少3:

  • 小寫字母(即AZ)
  • 大寫字母(即AZ )
  • 數字(即0-9)
  • 特殊字符(如!@#$ & *)

我正在通過this討論,發現this真的很棒。

現在我想要寫的正則表達式的提要求,我想出了這樣的

^(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[[email protected]#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9]).{8,}$ 

的解決方案,它是工作完美見rubular,但我想優化這些正則表達式,我不確定如果有任何方法可以簡化這一點。 任何建議將不勝感激。 非常感謝

+0

優化這個正則表達式意味着將它分解成幾個較小的正則表達式。他們將更加可讀和可維護。 –

+0

@WiktorStribiżew我將非常感謝如果你可以在這裏提供任何有用的鏈接,謝謝 –

+0

如果正則表達式工作正常,或許,問這個問題更好的地方是[codereview.se]。 –

回答

3

請你(和任何人誰就會在未來該應用程序的工作)的忙,並分成4正則表達式:

{ 
    :lowercase => /regex_for_lowercase/, 
    :uppercase => /regex_for_uppercase/, 
    :digits => /regex_for_digits/, 
    :symbols => /regex_for_symbols/, 
} 

再指望有多少這4個規則的密碼匹配。如果輸入的密碼不確認,它也會給你顯示更有用的錯誤信息的機會。