RegEx to make sure that the string contains at least one lower case char, upper case char, digit and symbol

ID : 20088

viewed : 11

Tags : regexregex

Top 5 Answer for RegEx to make sure that the string contains at least one lower case char, upper case char, digit and symbol

vote vote

90

If you need one single regex, try:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W) 

A short explanation:

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists (?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists (?=.*\d)           // use positive look ahead to see if at least one digit exists (?=.*\W])        // use positive look ahead to see if at least one non-word character exists 

And I agree with SilentGhost, \W might be a bit broad. I'd replace it with a character set like this: [-+_!@#$%^&*.,?] (feel free to add more of course!)

vote vote

81

Bart Kiers, your regex has a couple issues. The best way to do that is this:

(.*[a-z].*)       // For lower cases (.*[A-Z].*)       // For upper cases (.*\d.*)          // For digits (.*\W.*)          // For symbols (non-word characters) 

In this way you are searching no matter if at the beginning, at the end or at the middle. In your have I have a lot of troubles with complex passwords.

vote vote

72

You can match those three groups separately, and make sure that they all present. Also, [^\w] seems a bit too broad, but if that's what you want you might want to replace it with \W.

vote vote

60

vote vote

51

Top 3 video Explaining RegEx to make sure that the string contains at least one lower case char, upper case char, digit and symbol

Related QUESTION?