2011-04-29 84 views
5

我正在爲我們的密碼要求尋找單個正則表達式。密碼:RegEx密碼強度驗證問題

  • 必須至少8個字符
  • 不能包含空格
  • 同時包含大小寫字符
  • 至少包含一個數字位數
  • 至少包含一個特殊字符(即任何字符不是0-9,a-z,A-Z
+4

這是正則表達式的糟糕用法。手動操作非常簡單。我建議不要使用正則表達式。 – 2011-04-29 15:54:28

+0

我看到一個組合爆炸... – 2011-04-29 15:57:13

+1

它在一個單一的表達rewuirement使它複雜,非常難以閱讀的人必須保持它。我建議在不同的測試中將其分開,以使其更易於維護。你也忘了提及你使用的是什麼正則表達式引擎,因爲你可以做的事情有所不同。根據測試的完成情況,可能會向用戶反饋密碼失敗的原因。 – some 2011-04-29 16:00:16

回答

4

理念和大部分工作從http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$ 

採取我曾經在他的崗位底部的基本答案,而是全部換成了點與\S排除空格字符,和周圍的一些感動斷言。

+0

差不多+1。被引用的文章是一個很好的文章,但它錯誤地建議在表達式的開始處使用'。*'點星號(這不是必須的,因爲末尾的星號將匹配字符串)。雖然它對這個特定問題沒有壞處(你的回答是正確的並且工作正常),但如果密碼長度有上限,它將會失敗。如果長度要求是8到12個字符,那麼正確的表達式是:(^ =。{8,12} $)(?=。* [az])(?=。* [AZ])( (注意,在前視圖中不需要'\ S')否則就是很好的答案。 – ridgerunner 2011-04-29 17:07:33

8

它可能會更容易編碼的邏輯。正則表達式用於匹配模式。密碼往往是隨機的字符串,所以這個問題不容易被正則表達式解決。這是可能的,但會很難理解,難以維護。