我需要强大的密码验证正则表达式
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}$
但它会忽略特殊字符(在哪里添加?)
请帮忙!
答案 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}$
[a-zA-Z0-9@]{6,12}
(?=.*\d)
(?=.*[A-Z])
(?!.*(.)\1\1)
确保不允许任何字符连续出现两次以上。子串aa
没问题,aaa
不是
让(?!.*(.+)\1\1)
拒绝多个长度重复的子字符串(例如ababab
)或在.*
之前添加\1
以拒绝不连续的重复出现。答案 2 :(得分:2)
您可以搜索regex library
答案 3 :(得分:1)
以下名为pwdMeter的Jquery插件工作,似乎是一种很酷的方式来向用户显示什么是强密码,什么不是强密码。