我需要一个正则表达式来输入密码。密码必须至少包含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
答案 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); }
}
尝试使用至少一个特殊字符
创建随机密码