views:

74

answers:

1

When running my Javascript through JSLint, I get the following two errors from the same line of code.

Problem at line 398 character 29: Insecure '.'.

if (password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/))

Problem at line 398 character 41: Unescaped '^'.

if (password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/))

I understand that JSLint may be being "over-cautious". I read the comments on a similar question, Purpose of JSLint "disallow insecure in regex" option.

Nonetheless, I would like to have the best of all worlds, and have a working regular expression that also doesn't cause JSLint to complain.

But I fail at regex.

Is it possible to make regular expression that looks for the presence of at least one special character, yet doesn't cause JSLint to complain?

Thank you for any advice.

+1  A: 

That's a character class; you don't need a separator (eg: the commas). You might also want to escape certain characters that have special meaning in regex (the caret ^ and the dash -):

/[!@#$%\^&*?_~\-()]/

Should work. You can also use the non-word character class:

/\W/

That matches anything that's not a letter (a-zA-Z), number (0-9) or underscore (_).

NullUserException
The caret only has special meaning in a character class if it is the first character, so should not (typically) be escaped.
Ben Blank
@Ben Yeah, and you also don't have to escape the dash if it's the last character in the character class in some regex flavors. I just want to play it safe
NullUserException
@NullUserException — I'd still say it's best to only use escapes where they're actually needed. Check out http://www.regexguru.com/2008/12/dont-escape-literal-characters-that-arent-metacharacters/
Ben Blank