2013-05-22 256 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

相关问题