强密码正则表达式

时间:2010-06-28 08:39:24

标签: c# regex

我需要强大的密码验证正则表达式

Special Characters - Not Allowed
Spaces - Not Allowed
Numeric Character - At least one character
At least one Capital Letter 
Minimum and Maximum Length of field - 6 to 12 Characters
Repetitive Characters - Allowed only two repetitive characters

我的正则表达式是^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s)(?=(?:(\w)(?!\1{2}))+).{6,12}$ 但它会忽略特殊字符(在哪里添加?)

请帮忙!

4 个答案:

答案 0 :(得分:31)

听起来不像是一个特别适合Regex的任务,因为你想同时测试多个条件。 (您可以使用多个正则表达式,但是使用LINQ的正常C#是一种更好的测试方法。)尝试以下函数:

public static bool IsStrongPassword(string password)
{
    // Minimum and Maximum Length of field - 6 to 12 Characters
    if (password.Length < 6 || password.Length > 12)
        return false;

    // Special Characters - Not Allowed
    // Spaces - Not Allowed
    if (!(password.All(c => char.IsLetter(c) || char.IsDigit(c))))  
        return false;

    // Numeric Character - At least one character
    if (!password.Any(c => char.IsDigit(c)))
        return false;

    // At least one Capital Letter
    if (!password.Any(c => char.IsUpper(c)))
        return false;

    // Repetitive Characters - Allowed only two repetitive characters
    var repeatCount = 0;
    var lastChar = '\0';
    foreach(var c in password)
    {
        if (c == lastChar)
            repeatCount++;
        else
            repeatCount = 0;
        if (repeatCount == 2)
            return false;
        lastChar = c;
    }

    return true;
}

当然,请确保导入System.Linq,然后就可以了。

答案 1 :(得分:25)

^(?=.*[A-Z])(?=.*\d)(?!.*(.)\1\1)[a-zA-Z0-9@]{6,12}$
  • 特殊字符 - 不允许
  • 空格 - 不允许
  • 最小和最大字段长度 - 6到12个字符
    [a-zA-Z0-9@]{6,12}
  • 数字字符 - 至少一个字符
    positive lookahead (?=.*\d)
  • 传达
  • 至少一封大写字母
    通过积极的前瞻(?=.*[A-Z])
  • 来表达
  • 重复字符 - 仅允许两个重复字符
    我不确定你的意思。否定前瞻(?!.*(.)\1\1)确保不允许任何字符连续出现两次以上。子串aa没问题,aaa不是 让(?!.*(.+)\1\1)拒绝多个长度重复的子字符串(例如ababab)或在.*之前添加\1以拒绝不连续的重复出现。

答案 2 :(得分:2)

您可以搜索regex library

答案 3 :(得分:1)

以下名为pwdMeter的Jquery插件工作,似乎是一种很酷的方式来向用户显示什么是强密码,什么不是强密码。

http://shouvik.net/pwdmeter.php