6个字符或以上的弱密码,至少包含1位数字
本文关键字:包含 数字 1位 密码 字符 6个 | 更新日期: 2023-09-27 18:05:31
我想为密码创建正则表达式,长度至少为6个字符,其中至少包含1个数字。这是我想到的表达式:
Regex regEx = new Regex(@"^?='d.{6,}$");
但这似乎不起作用。有人能告诉我为什么吗?
我猜它说的是在开始和结束之间,它执行向前看,看看是否有数字出现在密码中。它出现了,然后说任何东西都可以重复{6},说至少6个字符。但这似乎行不通。有人能纠正我吗?
更新:应Albin Sunnanbo的要求,我已将标题从强密码更改为弱密码
正则表达式不太适合"在任何位置至少包含x "这样的要求。
试试这个:
bool result = (password.Length >= 6) && password.Any(char.IsDigit);
您的非捕获组缺少括号。试试这个:
^(?=.*'d).{6,}$
验证一些基本功能的小测试:
[TestMethod]
public void CheckAtLeastNotSuperWeakPassword()
{
var r = new Regex(@"^(?=.*'d).{6,}$");
Action<string, bool> a = (s, b) =>
{
Assert.AreEqual(b, r.IsMatch(s), s);
};
a("", false);
a("a", false);
a("abcdef", false);
a("abcdefg", false);
a("1", false);
a("abc1e", false);
a("abc1ef", true);
a("1bcaef", true);
a("cbcae1", true);
a("cbcae1wqd32", true);
}
通过RegEx进行密码验证有一个关于该主题的体面讨论。
你可以使用:
^'w*(?='w*'d)(?='w*.{6,})'w*$
我不认为这是正则表达式的问题。如果您对密码字符串有一组标准,只需编写代码来检查这些标准。
从长远来看,你最终会得到一个更易于表达、更易于维护的解决方案。
pseudocode-ish
If pass <> confirmPass Then
FailPasswordCheck("Password and confirmation did not match.")
Return False
End If
If pass.Length < 7 Then
FailPasswordCheck("Password must be at least 7 characters long.")
Return False
End If
If Not ContaintsNumericChar(pass) Then
FailPasswordCheck("Password must have at least 1 number.")
Return False
End If
这是一个很简单的例子:
(?=.*/d).{6}
解释(?=.*/d) #a look around for a digit preceded by any number of chars.
.{6} #6 chars
注意:我不包括开始(^
),字符串结束($
)或超过6个字符({6,}
),因为它们对原始问题不是严格必要的。