密码少于6个字符或以上且至少1个数字

时间:2011-08-12 17:41:41

标签: c# regex

我想为密码创建正则表达式,其长度至少为6个字符,并且其中至少包含1位数字。这是我提出的表达方式:

Regex regEx = new Regex(@"^?=\d.{6,}$");

但这似乎不起作用。谁能告诉我为什么?

我猜它在开始和结束之间说,它会预先查看密码中是否显示任何数字。看来,然后说任何事都可以重复{6,}说至少6个字符。但这似乎不起作用。任何人都可以纠正我吗?

更新:根据Albin Sunnanbo的要求,我已将标题从强密码更改为弱密码。

5 个答案:

答案 0 :(得分:7)

正则表达式不是很好,例如“在任何位置至少包含x”。

试试这个:

bool result = (password.Length >= 6) && password.Any(char.IsDigit);

答案 1 :(得分:2)

Password Validation via RegEx对该主题进行了不错的讨论。

您可以使用:

^\w*(?=\w*\d)(?=\w*.{6,})\w*$

答案 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,})因为它们对于原始问题不是绝对必要的。