Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

regular expression for strong password

Tags:

c#

regex

winforms

I need a regular expression that Contain at least two of the five following character classes:

  • Lower case characters
  • Upper case characters
  • Numbers
  • Punctuation
  • “Special” characters (e.g. @#$%^&*()_+|~-=\{}[]:";'<>/` etc.)

This is I have done so far

int upperCount = 0;
int lowerCount = 0;
int digitCount = 0;
int symbolCount = 0;

for (int i = 0; i < password.Length; i++)
{
    if (Char.IsUpper(password[i]))
        upperCount++;
    else if (Char.IsLetter(password[i]))
        lowerCount++;
    else if (Char.IsDigit(password[i]))
        digitCount++;
    else if (Char.IsSymbol(password[i]))
        symbolCount++;

but Char.IsSymbol is returning false on @ % & $ . ? etc..

and through regex

Regex Expression = new Regex("({(?=.*[a-z])(?=.*[A-Z]).{8,}}|{(?=.*[A-Z])(?!.*\\s).{8,}})");    
bool test= Expression.IsMatch(txtBoxPass.Text);

but I need a single regular expression with "OR" condition.

like image 355
Khurram Zulfiqar Ali Avatar asked May 09 '14 06:05

Khurram Zulfiqar Ali


People also ask

What does ?= Mean in regular expression?

?= is a positive lookahead, a type of zero-width assertion. What it's saying is that the captured match must be followed by whatever is within the parentheses but that part isn't captured. Your example means the match needs to be followed by zero or more characters and then a digit (but again that part isn't captured).

What is the regex for special characters?

Special Regex Characters: These characters have special meaning in regex (to be discussed below): . , + , * , ? , ^ , $ , ( , ) , [ , ] , { , } , | , \ . Escape Sequences (\char): To match a character having special meaning in regex, you need to use a escape sequence prefix with a backslash ( \ ). E.g., \. matches "."


1 Answers

In other words, you want a password that doesn't just contain one "class" of characters. Then you can use

^(?![a-z]*$)(?![A-Z]*$)(?!\d*$)(?!\p{P}*$)(?![^a-zA-Z\d\p{P}]*$).{6,}$

Explanation:

^           # Start of string
(?![a-z]*$) # Assert that it doesn't just contain lowercase alphas
(?![A-Z]*$) # Assert that it doesn't just contain uppercase alphas
(?!\d*$)    # Assert that it doesn't just contain digits
(?!\p{P}*$) # Assert that it doesn't just contain punctuation
(?![^a-zA-Z\d\p{P}]*$) # or the inverse of the above
.{6,}       # Match at least six characters
$           # End of string
like image 58
Tim Pietzcker Avatar answered Sep 20 '22 22:09

Tim Pietzcker