2011-08-12 91 views
3

我想爲長度至少爲6個字符且包含至少1個數字的密碼創建正則表達式。這是我想出的表達式:6個字符或以上的弱密碼,至少有1個數字

Regex regEx = new Regex(@"^?=\d.{6,}$"); 

但是,這似乎並不奏效。有人可以告訴我爲什麼嗎?

我想它說在開始和結束之間,它會執行向前查看是否有任何數字出現在密碼中。如果出現那麼。說任何事情都可以重複{6,}說至少6個字符。但這似乎並不奏效。有人能糾正我嗎?

更新:根據Albin Sunnanbo的要求,我已將標題從強密碼更改爲弱密碼。我希望他現在快樂,並準備幫助我。

+0

編輯標題爲「6個字符」 - 我認爲這是你的意思。 –

+4

我不會稱'qwert1'爲強密碼。 –

回答

2

您的不捕獲組缺少括號。試試這個:

^(?=.*\d).{6,}$ 

小測試來驗證一些基本的功能:

[TestMethod] 
    public void CheckAtLeastNotSuperWeakPassword() 
    { 
     var r = new Regex(@"^(?=.*\d).{6,}$"); 
     Action<string, bool> a = (s, b) => 
     { 
      Assert.AreEqual(b, r.IsMatch(s), s); 
     }; 
     a("", false); 
     a("a", false); 
     a("abcdef", false); 
     a("abcdefg", false); 
     a("1", false); 
     a("abc1e", false); 
     a("abc1ef", true); 
     a("1bcaef", true); 
     a("cbcae1", true); 
     a("cbcae1wqd32", true); 
    } 
7

正則表達式是不要求很好,如「包含在任意位置至少爲x」。

試試這個:

bool result = (password.Length >= 6) && password.Any(char.IsDigit); 
+0

其實我正在使用Asp.Net正則表達式驗證器。這是不能代碼。如果你用正則表達式來描述上述邏輯將會好得多。我已經使用正則表達式發佈它,因爲我在控制檯應用程序中嘗試示例。不過,我真正的使用是在Asp.Net。 – TCM

1

我不認爲這是對正則表達式的一個問題。如果您有一組密碼字符串的條件,只需編寫代碼來檢查這些字符串。

長遠來看,您將得到一個更具表現力,更容易維護的解決方案。

僞上下的

If pass <> confirmPass Then 
     FailPasswordCheck("Password and confirmation did not match.") 
     Return False 
    End If 
    If pass.Length < 7 Then 
     FailPasswordCheck("Password must be at least 7 characters long.") 
     Return False 
    End If 

    If Not ContaintsNumericChar(pass) Then 
     FailPasswordCheck("Password must have at least 1 number.") 
     Return False 
    End If 
1

這裏是一個不錯的簡單的一個:

(?=.*/d).{6} 

解釋

(?=.*/d)  #a look around for a digit preceded by any number of chars. 
.{6}   #6 chars 

注:我不包括開始(^),字符串末尾($)或多於6個字符({6,}),因爲它們不是原始問題的嚴格必需。

相關問題