RegEx for:至少2个大写字母,至少2个数字和至少1个特殊字符(?。*!:)
我似乎无法在这里找到解决方案(对不起,如果有的话,但我已经搜索过,无法找到它)。基本上我已经在ASP.NET中为我的作业进行了网络聊天,唯一缺少的就是检查密码强度。我有一个验证器,需要输入RegEx来检查上述条件。我自己尝试过这样做,但我真的很笨拙。
示例密码: paSSword?123
提前感谢您的帮助和解释:)
编辑:到目前为止,我已经达到了类似的目标,但它似乎无法发挥作用。
^(?=.{8,50}$)(?=(.*[!?:.*]){1,})(?=(.*[A-Z]){2,})(?=(.*[a-z]))(?=(.*[0-9]){2,}).*
第一部分检查长度,第二部分检查提供的特殊字符,因此至少有一个..依此类推等等。
答案 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());