统计字符串中数组中字符出现的次数?

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
@Oliver:我猜黑骑士会在24小时等待期之后授予赏金。 - Chris Sinclair
我在考虑给予点赞。当然还有我的个人感激之情;)。但是,如果有人认为一个答案值得一份赏金,那么我会授予它。 - Kev
https://dev59.com/KWcs5IYBdhLWcg3wYy9T#12899943 - oleksii
也许这会有所帮助 https://dev59.com/6mbWa4cB1Zd3GeqPVlIf - Liviu
4个回答

17

我如何计算一组字符中任意字符的出现次数?

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

2
+1,slick ...........,对于像我这样的人来说,它的简化形式将是:var temp = password.Count(r=> nonAlphaNumericCharSet.Contains(r)); - Habib
谢谢您的解释。我只是想知道更简单的形式是什么。 - Kev
1
@Carra,是的,只差6分钟。 - Habib
那样做还更有效率 :) - Carra

1
你可以这样计算
int count = "he!l!l!o".Split('!').Length - 1;

它将返回3。

使用linq

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

1

Here's an example:

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=最小非单词/数字字符数

8=最小密码长度

Linq可能被认为很优雅(在我看来并不是),但代价是什么?

------------评论后更新---------------

如果你想匹配一部分字符,你必须用 [] 替换 \W

[]= 字符范围

有些字符必须用 \ 转义

在这种情况下:[#\*!\?£\$\+-\^\<\>\[\]~\(\)&]

在这里你可以找到一个 正则表达式速查表


谢谢。Regex(正则表达式)非常强大,但我不太擅长使用它们。然而,在这种情况下,重要的是仅匹配预定义集合中的标点符号,而不是所有的标点符号。我该如何用正则表达式实现呢? - Kev
@BlackKnight 刚刚更新了我的答案。我也不擅长正则表达式。我发现这个速查表非常有用:https://github.com/shadowbq/Cheat-Sheets/blob/master/regex/regular-expressions-cheat-sheet-v2.pdf 我已经打印出来了,总是放在我的桌子旁边! - giammin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接