请有人按照以下规则给我正确的密码表达。
密码长度至少应为7个字符。 它应包含最少3位数字和一个字母字符。 密码可以接受任意次数的数字,字母,特殊字符,但数字应至少为3。
答案 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/
您也可能希望针对简单字典运行密码,以查看它是否可以被字典攻击绕过。