2010-09-21 102 views
3

当通过JSLint运行我的JavaScript时,我从同一行代码中得到以下两个错误。有没有办法让JSLint满意这个正则表达式?

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

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

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

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

我知道JSLint可能会“过于谨慎”。我阅读了关于类似问题的评论,Purpose of JSLint "disallow insecure in regex" option

尽管如此,我想拥有最好的世界,并有一个正常工作的表达式,也不会导致JSLint抱怨。

但我在正则表达式失败。

是否有可能使正则表达式查找至少存在一个特殊字符,但不会导致JSLint抱怨?

+2

与您的问题没有直接关系,但您不需要在角色类中使用所有这些逗号(并且需要将短划线移至开头或结尾)。如果你想匹配逗号,它应该是'[,!@#$%^&*?_〜() - ]'。如果没有(正如我所期望的那样),它应该是'[!@#$%^&*?_〜() - ]'。 – 2010-09-21 06:07:20

+0

这是不相关的,但请不要强制用户在他们的密码中包含符号。这不是一个好主意。 – 12Me21 2017-05-26 05:15:09

回答

3

这是一个角色类;你不需要分隔符(例如:逗号)。您可以通过将插入符号(^)和破折号(-)置于战略位置来清理正则表达式,因此不需要转义。

/[[email protected]#$%^&*?_~()-]/ 

应该工作。您也可以使用非单词字符类:

/\W/ 

匹配任何这不是一个字母(a-zA-Z),数(0-9)或下划线(_)。

+1

插入符号只在字符类中具有特殊含义,如果它是第一个字符,则不应该(通常)被转义。 – 2010-09-21 06:08:43

+0

@Ben Yeah,如果它是角色类中的最后一个字符,那么你也不必逃避破折号。我只想玩它安全 – NullUserException 2010-09-21 06:11:28

+0

甜。我还在中间的一段时间添加了,如下所示:/[[email protected]#$.%\^&*?_~\-()]/因为我想让人们在他们的密码中也使用一段时间。 JSLint看起来很开心,一些快速测试表明代码按预期工作。非常感谢!! – Questioner 2010-09-21 06:35:11

相关问题