密码必须至少有一个非alpha字符

时间:2012-08-21 12:38:07

标签: c# html regex asp.net-mvc validation

我需要一个正则表达式来输入密码。密码必须至少包含8个字符。至少一个字符必须是数字或特殊字符(不是字母)。

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[RegularExpression(@"(?=.*\W)?(?=.*\d)", ErrorMessage = "Error message")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

我有一个长度验证,但我需要一个正则表达式的帮助,检查密码是否包含至少一个数字或特殊字符。

有效密码的示例:

testtest85*
testtes*
testtes1
test1234*+

无效密码的示例:

testtest
testabc

6 个答案:

答案 0 :(得分:25)

使用正则表达式^(?=.{8})(?=.*[^a-zA-Z])


说明:

^(?=.{8})(?=.*[^a-zA-Z])
│└──┬───┘└──────┬──────┘
│   │           │
│   │           └ string contains some non-letter character
│   │
│   └ string contains at least 8 characters
│
└ begining of line/string

如果你想限制最大长度(比方说16),那么使用正则表达式:

^(?=.{8,16}$)(?=.*[^a-zA-Z])

答案 1 :(得分:2)

通过一个相当简单的正则表达式运行它:[^a-zA-Z]

然后分别检查它的长度:

if(string.Length > 7)

答案 2 :(得分:1)

一个简单的方法是这样的:

Match match1 = Regex.Match(<input_string>, @"(?=.{7})");   

match1.Success确保至少有8个字符。

Match match2 = Regex.Match(<input_string>, [^a-zA-Z]);

match2.Success确保字符串中至少有一个特殊字符或数字。

So, match1.Success && match2.Success guarantees will get what you want.

答案 3 :(得分:0)

我尝试过Omega的例子,但它没有使用我的C#代码。我建议改用:

[RegularExpression(@"^(?=[^\d_].*?\d)\w(\w|[!@#$%]){7,20}", ErrorMessage = @"Error. Password must have one capital, one special character and one numerical character. It can not start with a special character or a digit.")]

答案 4 :(得分:-1)

这样的表达式:

[a-zA-Z]*[0-9\+\*][a-zA-Z0-9\+\*]*

应该可以正常工作(显然插入你想要允许的任何其他特殊字符或使用^运算符来匹配除字母/数字之外的任何内容);无需使用复杂的外观。如果您只想允许某些您知道“安全”的特殊字符子集,并且禁止所有其他特殊字符,则此方法很有意义。

如果你想要包括除了某些你知道“不安全”的特殊字符,那么使用类似的东西是有道理的:

\w[^\\]*[^a-zA-Z\\][^\\]*

在这种情况下,您明确禁止在密码中使用反斜杠,并允许任何组合至少包含一个非字母字符。

上面的表达式将匹配包含字母和至少一个数字或+,*的任何字符串。至于“8的长度”要求,真的没有理由检查使用正则表达式。

答案 5 :(得分:-1)

  function randomPassword(length) {
        var chars = "abcdefghijklmnopqrstuvwxyz#$%ABCDEFGHIJKLMNOP1234567890";
        var pass = "";
        for (var x = 0; x < length; x++) {
            var i = Math.floor(Math.random() * chars.length);
            pass += chars.charAt(i);
        }
        var pattern = false;
        var passwordpattern = new RegExp("[^a-zA-Z0-9+]+[0-9+]+[A-Z+]+[a-z+]");
        pattern = passwordpattern.test(pass);
        if (pattern == true)
            { alert(pass); }
        else
         { randomPassword(length); }
    }

尝试使用至少一个特殊字符

创建随机密码