2010-11-07 81 views
3

我需要爲用戶密碼編寫一些驗證規則並滿足以下要求。 C#ASP.NET MVC。密碼驗證(正則表達式?)

密碼必須6 - 8個字符
,必須包括至少一個字符 每個從至少三個所述 以下類別:

  1. 大寫字母
  2. 下 - 字母
  3. 數字數字
  4. 非字母數字字符(如!@#$%...)

不得包含在共同 與用戶名的任何 的3個或更多字符序列
切不可 重複任何以前1個密碼
如果密碼是 認爲以任何方式

目前我已經使用寫了一堆真的很亂驗證規則受到損害必須改變,如果語句和循環(especiall Ÿ按用戶名部分順序排列的3個字符),它目前是功能性的,但它只是感覺它的錯誤。我可以採取更好的方法嗎?

謝謝

+0

小心分享您以前的產品?審查你的正則表達式並使之更合適可能是教育性的。 – 2010-11-07 01:51:28

+2

「不得重複任何以前的1個密碼」 - 無論您做什麼,都不要存儲舊密碼。存儲哈希和鹽,並且只比較哈希值。 – 2010-11-07 02:21:20

+1

我明白下限。但爲什麼有一個上限? – Gumbo 2010-11-07 17:39:42

回答

3

我寫了一個非常類似於你所描述的。它們可以作爲正則表達式來完成,完成時(至少對我自己而言)這是一個非常有意義的成就。

要做到這一點,您將需要使用稱爲lookaheads的正則表達式功能。在regular-expression.info網站上查看the information瞭解所有血淋淋的細節。

你需要的第二件事是一個實時正則表達式測試器來幫助你爲你的正則表達式建模。我建議你退房Rubular。創建一些應該起作用的密碼,有些不應該起作用,並從那裏開始作爲您的出發點。

編輯: 詳細說明我上面的評論。並非每個需求都可以或應該通過正則表達式來解決。也就是說,你列出的要求爲:

  • 不得包含在共同的3個或更多字符的任意序列的用戶名
  • 不能重複任何先前的1個密碼
  • 必須的,如果改變的密碼被認爲以任何方式

或許應該從主密碼驗證的正則表達式另案處理受到損害,因爲這些是高度情境化。可能在客戶端處理與「」共有的3個或更多字符的「」序列。但是,其他兩個項目可能最好在服務器端處理。