简体   繁体   中英

Regex not allowing certain special characters

I have the following regex which does not allow certain special characters:

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){    
    alert("password not valid");
}
else
{
    alert("password valid");
}

This is working. This regex will accept a password if it does not contain any of the special characters inside the bracket (~,.<>;':"\\/\\[\\]\\|{}()-=_+) .

My problem here is it also don't allow me to input numbers which is weird.

Anything I missed here? Thanks in advance!

Here is a sample:

jsFiddle

You've got a character range in there: )-= which includes all ASCII characters between ) and = (including numbers). Move the - to the end of the class or escape it:

/[`~,.<>;':"\/\[\]\|{}()=_+-]/

Also, you don't need to escape all of those characters:

/[`~,.<>;':"/[\]|{}()=_+-]/

Note that in your case, it is probably enough for you, to use test instead of match :

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){
    ...

test returns a boolean (which is all you need), while match returns an array with all capturing groups (which you are discarding anyway).

Note that, as Daren Thomas points out in a comment, you should rather decide which characters you want to allow . Because the current approach doesn't take care of all sorts of weird Unicode characters, while complaining about some fairly standard ones like _ . To create a whitelist, you can simply invert both the character class and the condition:

if (!/[^a-zA-Z0-9]/.test(testString)) {
   ...

And include all the characters you do want to allow.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM