Strong password regex [duplicate]
Solution 1:
Doesn't sound like a task particularly suited for Regex, since you want to test multiple conditions simultaneously. (You could use multiple regexes, but then normal C# with LINQ is a nicer way to test it.) Try the following function:
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;
}
Make sure you import System.Linq
of course, and you're set to go.
Solution 2:
^(?=.*[A-Z])(?=.*\d)(?!.*(.)\1\1)[a-zA-Z0-9@]{6,12}$
- Special Characters - Not Allowed
- Spaces - Not Allowed
- Minimum and Maximum Length of field - 6 to 12 Characters
Met by[a-zA-Z0-9@]{6,12}
- Numeric Character - At least one character
Met by positive lookahead(?=.*\d)
- At least one Capital Letter
Met by positive lookahead(?=.*[A-Z])
- Repetitive Characters - Allowed only two repetitive characters
I am not sure what you mean by this. The negative lookahead(?!.*(.)\1\1)
makes sure that no character is allowed to appear more than two times in a row. Substringaa
is okay,aaa
is not.
Make it(?!.*(.+)\1\1)
to reject repeated substrings of length more than one (likeababab
) or add.*
before\1
to reject non-continuous repeated appearances too.
Solution 3:
You can search the regex library