2011-12-07 66 views
8

如何在C#中驗證密碼至少包含X個大寫字母和至少Y個數字,並且整個字符串比Z長?如何驗證密碼是否包含X大寫字母和Y數字?

謝謝。

+0

+1,有用的問題。 –

+0

我會使用一些標準的pwd驗證規則可能與RegEx,而不是字符char解析...看到這一個:http://stackoverflow.com/questions/1152872/creating-a-regex-to-check-for-a -strong-password –

回答

9

密碼強度:

首先,我會讀了密碼強度,並仔細檢查你的政策,以確保你正在做正確的事(我不能告訴你了手):

然後我會檢查其他問題:

然後,我言歸正傳。

實現:

你可以使用Linq:

return password.Length >= z 
    && password.Where(char.IsUpper).Count() >= x 
    && password.Where(char.IsDigit).Count() >= y 
    ; 

你也可以使用正則表達式(這可能是一個不錯的選擇,讓你插上在未來更復雜的驗證):

return password.Length >= z 
    && new Regex("[A-Z]").Matches(password).Count >= x 
    && new Regex("[0-9]").Matches(password).Count >= y 
    ; 

或者你可以混合和匹配它們。

如果你有這個多次做,你可以通過建立一個類重用Regex實例:

public class PasswordValidator 
{ 
    public bool IsValid(string password) 
    { 
     return password.Length > MinimumLength 
      && uppercaseCharacterMatcher.Matches(password).Count 
       >= FewestUppercaseCharactersAllowed 
      && digitsMatcher.Matches(password).Count >= FewestDigitsAllowed 
      ; 
    } 

    public int FewestUppercaseCharactersAllowed { get; set; } 
    public int FewestDigitsAllowed { get; set; } 
    public int MinimumLength { get; set; } 

    private Regex uppercaseCharacterMatcher = new Regex("[A-Z]"); 
    private Regex digitsMatcher = new Regex("[a-z]"); 
} 

var validator = new PasswordValidator() 
{ 
    FewestUppercaseCharactersAllowed = x, 
    FewestDigitsAllowed = y, 
    MinimumLength = z, 
}; 

return validator.IsValid(password); 
+1

+1,對於一個單行的答案,但你的力氣提供了這個數字計數.. –

+0

@SaiKalyanAkshinthala:現在修復。我在擴展我的答案時看到了我的錯誤:) –

+0

感謝您的詳細解答!非常有幫助 – SexyMF

6

要計算大寫字母和數字:

string s = "some-password"; 
int upcaseCount= 0; 
int numbersCount= 0; 
for (int i = 0; i < s.Length; i++) 
{ 
    if (char.IsUpper(s[i])) upcaseCount++; 
    if (char.IsDigit(s[i])) numbersCount++; 
} 

,並檢查s.Length的長度

好運!

+1

+1,簡單但完美的答案。 –

1

簡短而明確的使用LINQ Where() method

int requiredDigits = 5; 
int requiredUppercase = 5; 
string password = "SomE TrickY PassworD 12345"; 

bool isValid = password.Where(Char.IsDigit).Count() >= requiredDigits 
       && 
       password.Where(Char.IsUpper).Count() >= requiredUppercase; 
+0

+1,用於描述Where()方法。 –

0

這應該這樣做:

public bool CheckPasswordStrength(string password, int x, int y, int z) 
{ 
    return password.Length >= z && 
      password.Count(c => c.IsUpper(c)) >= x && 
      password.Count(c => c.IsDigit(c)) >= y; 
} 
相關問題