密码的正则表达式

时间:2009-08-10 13:39:20

标签: asp.net regex

请有人按照以下规则给我正确的密码表达。

密码长度至少应为7个字符。 它应包含最少3位数字和一个字母字符。 密码可以接受任意次数的数字,字母,特殊字符,但数字应至少为3。

5 个答案:

答案 0 :(得分:8)

正则表达式并不特别擅长确保特定字符组出现一定次数。虽然它可能是可能的 - 但毫无疑问它会令人费解并且不明显。

如果您使用.NET(C#或VB)进行编程,则可以使用简单的验证函数,例如:

bool ValidatePasswordCompliance( string password )
{
    int countDigits = 0;
    int countAlpha  = 0;
    int countOthers = 0;
    foreach( char c in password )
    {
         countDigit += c.IsDigit ? 1 : 0;
         countAlpha += c.IsAlpha ? 1 : 0;
         countOther += !(c.IsAlpha || c.IsDigit) ? 1 : 0;
    }
    return countDigits >= 3 && (countDigits + countAlpha + countOthers) >= 7;
}

如果您使用的是.NET 3.5或更高版本,则可以使用LINQ来简化此操作:

bool ValidatePasswordCompliance( string password )
{
    return password.Count() >= 7 &&
           password.Count( x => x.IsDigit ) >= 3;
}

答案 1 :(得分:4)

这更适合于验证功能,它逐个检查您的个人标准,而不是过于复杂的正则表达式。

如果您对使用正则表达式有所帮助,请查看this almost identical question ...但请阅读最高投票答案,而不仅仅是已接受的答案。

答案 2 :(得分:2)

正则表达式,如果做得恰到好处,则适用于所有目的。我建议这是不适合的案例之一。

不要误解我,你可以用一个RE来做,但它可能比检查长度和字符类的一些简单程序要复杂得多,难以维护。

答案 3 :(得分:1)

也就是说,有些人实际上是用正则表达式做的(虽然他们也承认它很复杂)

http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C4F005D3717

答案 4 :(得分:0)

你可以很容易地用正则表达式检查复杂性,但它不是一个结束......

关于设置您正在寻找的不同复杂性的好文章:

http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

您也可能希望针对简单字典运行密码,以查看它是否可以被字典攻击绕过。