需要RegEx才能输入我的密码验证器

时间:2016-11-29 11:53:04

标签: c# asp.net regex passwords

RegEx for:至少2个大写字母,至少2个数字和至少1个特殊字符(?。*!:)

我似乎无法在这里找到解决方案(对不起,如果有的话,但我已经搜索过,无法找到它)。基本上我已经在ASP.NET中为我的作业进行了网络聊天,唯一缺少的就是检查密码强度。我有一个验证器,需要输入RegEx来检查上述条件。我自己尝试过这样做,但我真的很笨拙。

示例密码: paSSword?123

提前感谢您的帮助和解释:)

编辑:到目前为止,我已经达到了类似的目标,但它似乎无法发挥作用。

^(?=.{8,50}$)(?=(.*[!?:.*]){1,})(?=(.*[A-Z]){2,})(?=(.*[a-z]))(?=(.*[0-9]){2,}).*

第一部分检查长度,第二部分检查提供的特殊字符,因此至少有一个..依此类推等等。

1 个答案:

答案 0 :(得分:1)

正则表达式不能很好地计算字符串中字母的出现次数。您应该使用一些LINQ:

int totalNumber = myPassword.Length;
int upperCaseChars = myPassword.Count(x => char.IsUpper(x));
int lowerDigitChars = myPassword.Count(x => char.IsNumber(x));
int specialChars = myPassword.Count(x => x == '.' || x == ':' || ...);
return upperCaseChars >= 2 && lowerCaseChars >= 2 and specialChars >= 1;

要搜索特殊字符,可能会使用正则表达式:

var r = new Regex("[\?\.\*!:]");
int specialChars = myPassword.Count(x => r.IsMatch(x.ToString());

然而,这似乎也很麻烦。

最后一种方法是使用char.IsSymbol检查许多(当然不是全部)特殊字符。如果这对你而言......

如果此解决方案不适合您,您还可以编写扩展方法来检查字符是否是特殊字符:

public static IsSpecial(this char c) 
{
    return c == '.' || c == ':' || ...
}

现在您可以按如下方式使用计数:

int specialChars = myPassword.Count(x => x.IsSpecial());