8

我需要一个密码的正则表达式。密码必须至少包含 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
4

6 回答 6

28

使用正则表达式模式^(?=.{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])
于 2012-08-21T14:21:17.000 回答
2

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

然后分别检查它的长度:

if(string.Length > 7)
于 2012-08-21T12:48:47.420 回答
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.
于 2012-08-23T05:28:23.277 回答
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.")]
于 2015-03-26T15:31:24.407 回答
-1

像这样的表达:

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

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

如果您想包含除某些您知道是“不安全”的特殊字符之外的所有特殊字符,那么使用以下内容是有意义的:

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

在这种情况下,您明确禁止密码中出现反斜杠,并允许与至少一个非字母字符进行任何组合。

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

于 2012-08-21T12:47:50.153 回答
-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); }
    }

试试这个来创建至少有一个特殊字符的随机密码

于 2017-01-05T08:06:26.137 回答