2013-05-22 316 views
7

我正在編寫代碼以確定密碼是否包含足夠的標點符號。計算字符串中數組中字符出現的次數?

如何計算一組中任何字符的出現次數?

這些方針的東西:

private const string nonAlphaNumericCharSet = "#*!?£$+-^<>[]~()&"; 
... 
public static bool PasswordMeetsStrengthRequirements(string password) 
{ 
    return password.Length >= MINIMUM_PASSWORD_LENGTH && password.NumberOfOccurences(nonAlphaNumericCharSet.ToCharArray()) >= MINIMUM_NONALPHANUMERIC_CHARS; 
} 

一個優雅的解決方案LINQ獎勵積分。

+3

你如何給出獎勵積分? – Oliver

+0

@奧利弗:我想黑騎士會獎勵獎金(24小時等待期後)。 –

+0

我正在考慮獎勵upvotes。當然我個人的感激之情;)。但是,如果人們認爲答案值得獎勵,那麼我會獎勵一個答案。 – Kev

回答

17

如何計算的任何字符出現次數的數量從一組?

var count = password.Count(nonAlphaNumericCharSet.Contains); 
+2

+ 1,slick ...........,對於像我這樣的人,它更簡單的形式是:'var temp = password.Count(r => nonAlphaNumericCharSet.Contains(r));' – Habib

+0

感謝說明。我只是想知道更簡單的形式是什麼。 – Kev

+1

那麼,打敗我的解決方案。 – Carra

1

你可以指望這樣

int count = "he!l!l!o".Split('!').Length - 1; 

它將返回3.

使用LINQ

int count="he!l!l!o".Count(x => x == '!'); 
1

下面是一個例子:

private const string nonAlphaNumericCharSet = "#*!?£$+-^<>[]~()&"; 

public static bool PasswordMeetsStrengthRequirements(string password) 
{ 
    return password.Count(x => nonAlphaNumericCharSet.Contains(x)) > 2 && password.Length > 1; 
} 

public static void Main() 
{ 
    PasswordMeetsStrengthRequirements("Test").Dump(); 
    PasswordMeetsStrengthRequirements("Test#").Dump(); 
    PasswordMeetsStrengthRequirements("(Test#").Dump(); 
    PasswordMeetsStrengthRequirements("(Te[st#").Dump(); 
} 
1

什麼有關RegExp

Regex rgx = new Regex(@"^(?=.*(\W.*){4,}).{8,}$", RegexOptions.Compiled); 
bool validPassword = rgx.IsMatch(password); 

4 = MIN不字/位炭

8 =分鐘密碼leght

Linq可能被認爲是優雅的(它不是恕我直言),但在哪些性能價格?

------------評論後更新---------------

如果你想匹配字符的一個子集,你必須

[]

[]更換\W =字符

一些字符必須與你的情況\

逃脫的範圍:[#\*!\?£\$\+-\^\<\>\[\]~\(\)&]

那裏你可以找到一個regular expression cheat sheet

+0

謝謝。正則表達式很強大,但我並不擅長。但是,在這種情況下,重要的是僅匹配預定義集合中的標點符號,而不是所有標點符號。我如何用正則表達式來做這件事? – Kev

+0

@BlackKnight剛剛更新了我的答案。我也不擅長正則表達。我發現這個cheatsheet非常有用:https://github.com/shadowbq/Cheat-Sheets/blob/master/regex/regular-expressions-cheat-sheet-v2.pdf我打印了它,它總是在我的桌子附近! – giammin

相關問題