与任何特殊字符匹配的强密码正则表达式

时间:2010-01-11 18:57:34

标签: c# regex

我需要以下检查才能进行强密码验证:

  • 至少7个字符
  • 至少1个大写字母(A-Z)
  • 至少1个数字(0-9)
  • 至少一个特殊字符

我发现并调整了一个RegEx,就像这样(抱歉,我丢失了参考资料......):

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@'#.$;%^&+=!""()*,-/:<>?]).*$

它在C#中工作,除了我需要匹配任何特殊字符的事实,我的意思是 ANY 。换句话说,我需要“特殊字符”是数字和低/大写字母。

编辑:

为了清楚起见,让我们考虑重音符特殊字符,因此éñ等在此问题的上下文中应被视为特殊字符

6 个答案:

答案 0 :(得分:8)

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$

答案 1 :(得分:5)

(不是C#代码)

def validate (value):
    return (value.Length >= 7 &&
            value.IndexOfAny(['0', ..., '9']) >= 0 &&
            value.IndexOfAny(['A', ..., 'Z']) >= 0 &&
            value.IndexOfAny(['@', ..., ')']));

是的我知道这不是问题所在,但我相信它比任何RegExp解决方案更清晰,性能更高,维护更容易。

答案 2 :(得分:4)

我相信: -

\ W

匹配任何单词字符。

反过来是: -

\ W

这就是你想要的。

修改

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).*$

在以下位置测试您的正则表达式: -

http://www.nregex.com/nregex/default.aspx

答案 3 :(得分:1)

在这里查看:Unicode Regular Expressions并选择一个Unicode类,例如\p{Symbol}\p{Punctuation}

答案 4 :(得分:0)

试试这个:

^(?=.{7,})(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[@'#.$;%^&+=!"()*,-/:<>?])

答案 5 :(得分:0)

Regex Rx = null;
            Rx = new System.Text.RegularExpressions.Regex("^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{7,}$");


            if (Rx.IsMatch(textBox3.Text))
            {
                textBox3.BackColor = Color.Green;
                textBox3.ForeColor = Color.White;
                MessageBox.Show("Password is (correct) format ");
            }
            else
            {
                textBox3.BackColor = Color.DarkRed;
                textBox3.ForeColor = Color.White;
                MessageBox.Show("Contact is (in-correct) format");

            }