4

I am trying to validate a password string with javascript and need some help with a regex. I have tried some tutorials, but I think I have some problems understanding how to escape quantifiers and/or metacharacters.

I want to make sure that the password string only contains one or more (max 32) characters from the following spans:

"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"012345678901234567890123456789"
"!@#%&/(){}[]=?+*^~-_.:,;"

The first three spans are pretty easy, but I can't figure out the last one. Basically my script looks something like this:

var password = "user_input_password";

if (/^[A-Za-z0-9!@#$%...]{1,32}$/.test(password)) {
    document.write('OK');
} else {
    document.write('Not OK');
}

Any help or input is highly appreciated, thanks!

José
  • 391
  • 3
  • 14

3 Answers3

4

In general, you can escape a meta-character using a backslash \; however, inside a character class, the only ones you have to escape are ] , \ and - (the ^ only has a meaning at the very beginning). Something like [\w!@#%&/(){}[\]=?+*^~\-.:,;] will do what you want.

The \w is equal to [A-Za-z0-9_].

So the full test would be something like:

/^[\w!@#%&/(){}[\]=?+*^~\-.:,;]{1,32}$/.test(password)
Tikhon Jelvis
  • 67,485
  • 18
  • 177
  • 214
2
/^[A-Za-z0-9!@#%&\/(){}\[\]=?+*^~\-_\.:,;]{1,32}$/
Nakul
  • 1,574
  • 11
  • 13
0

You can also match all characters that are not considered white space (space, newline, tab)

/^[^\s]{1,32}$/.test(password);

To exclude quotes as well (I didn't see them in your example) you can add those in:

/^[^\s'"]{1,32}$/.test(password);
Kai
  • 9,038
  • 5
  • 28
  • 28