我想为密码创建正则表达式,其长度至少为6个字符,并且其中至少包含1位数字。这是我提出的表达方式:
Regex regEx = new Regex(@"^?=\d.{6,}$");
但这似乎不起作用。谁能告诉我为什么?
我猜它在开始和结束之间说,它会预先查看密码中是否显示任何数字。看来,然后说任何事都可以重复{6,}说至少6个字符。但这似乎不起作用。任何人都可以纠正我吗?
更新:根据Albin Sunnanbo的要求,我已将标题从强密码更改为弱密码。
答案 0 :(得分:7)
正则表达式不是很好,例如“在任何位置至少包含x”。
试试这个:
bool result = (password.Length >= 6) && password.Any(char.IsDigit);
答案 1 :(得分:2)
答案 2 :(得分:2)
您的非捕获组缺少括号。试试这个:
^(?=.*\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);
}
答案 3 :(得分:1)
我认为这不是正则表达式的问题。如果您有一组密码字符串的标准,只需编写代码来检查密码字符串。
从长远来看,你最终会得到一个更具表现力,更易于维护的解决方案。
伪肥胖型
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
答案 4 :(得分:1)
这是一个很简单的问题:
(?=.*/d).{6}
解释
(?=.*/d) #a look around for a digit preceded by any number of chars.
.{6} #6 chars
注意: 我不包含开头(^
),字符串结尾($
)或更多内容超过6个字符({6,}
)因为它们对于原始问题不是绝对必要的。