14,936,036 members
See more:
hi
I have a regular expression

and the description is

( # Start of group
(?=.*\d) # must contains one digit from 0-9
(?=.*[a-z]) # must contains one lowercase characters
(?=.*[A-Z]) # must contains one uppercase characters
(?=.*[@#\$%]) # must contains one special symbols in the list "@#\$%"
. # match anything with previous condition checking
{6,20} # length at least 6 characters and maximum of 20
) # End of group

But my requirement is to validate any three in four conditions.
Could anyone help me in finding this.

*** need to validate at time of entering the details.
Posted

## Solution 1

Here is the simple idea: create three separate regular expressions, validate the input password four time against each of them and calculate the candidate password's score: how many non-failures? The password is good if number of non-failures is 3 or greater. That's it.

[EDIT]

Something like that:

C#
```System.Text.RegularExpressions.Regex[] criteria = new System.Text.RegularExpressions[] {
new System.Text.RegularExpressions.Regex("..."),
new System.Text.RegularExpressions.Regex("..."),
new System.Text.RegularExpressions.Regex("..."), //use first 3 criteria you already have
};

int len = value.Length;
if (value < 6) || (value > 20) return false;
byte score = 0;
for (System.Text.RegularExpressions.Regex criterion in criteria)
if (criterion.IsMatch(value)
++score;
return score > 2;
}```

—SA
v2
qwerty 2 19-Mar-12 1:19am

hi SAk

this would get me the output on clicking the button but i want it at the time of entry..
In case if you have given me the idea with the same please detail it..

No. This is the same. What do you mean "at the time of entry". You get entered value, use it in some predicate function `bool IsValidPassword(string)`. Inside this function, you check 4 condition one by one; and the result: `return score > 2;`. That's it. How it can be different?
--SA
qwerty 2 19-Mar-12 2:45am

hey SAK...
I have tried it ..but not able to get..
Can you post me the code..??

(Sigh...) Please see the update above, after [EDIT].
--SA
qwerty 2 19-Mar-12 3:19am

hmnn...
I have created a method already and validated but i want this to work as client side validation not after any click event...
{
bool result=true;
if (TxtPwd.Text != null)
{
string pass = TxtPwd.Text;

bool isDigit = false;
bool isLetter = false;
bool isLowerChar = false;
bool isUpperChar = false;
bool isNonAlpha = false;

if (pass.Length >= 8)
{

foreach (char c in pass)
{
if (char.IsDigit(c))
isDigit = true;
if (char.IsLetter(c))
{
isLetter = true;
if (char.IsLower(c))
isLowerChar = true;
if (char.IsUpper(c))
isUpperChar = true;
}
Match m = Regex.Match(c.ToString(), @"\W|_");
if (m.Success)
isNonAlpha = true;
}

if ((isDigit && isLetter && isLowerChar && isUpperChar && isNonAlpha) || (!isNonAlpha && isLetter && isLowerChar && isUpperChar && isDigit) || (!isDigit && isLetter && isLowerChar && isUpperChar && isNonAlpha) || (isDigit && isLetter && !isLowerChar && isUpperChar && isNonAlpha) || ((isDigit && isLetter && isLowerChar && !isUpperChar && isNonAlpha)))
result = true;

}
else
{
result = false;

}
}
else
{
result = true;
}
return result;
}

I don't know why doing it this way. Please see my answer and do it this way, only put your own regular expression. Run it under debugger to see what happens.
--SA
qwerty 2 19-Mar-12 3:30am

yeah but i want it for client side validation i.e when i enter password and go for next tab it should show me an error message if i have entered with only two combinations..

You tell me now! First, why not going with server-side validation? It could be safer.
Secondly, JavaScript also has Regular Expressions. Use exact same algorithm, translated to JavaScript.
Look, I don't feel I have enough energy to write the same code in different language...

I can see that you can do it by yourself...
--SA