提问人:Thomas R 提问时间:11/6/2010 更新时间:6/24/2014 访问量:17274
JSLint 在正则表达式中“不安全^”
JSLint "insecure ^" in regular expression
问:
JSLint 报告以下行的不安全“^”。为什么?或者它只是在我想否定角色类时抱怨?
// remove all non alphanumeric, comma and dash characters
"!$7s-gd,&j5d-a#".replace(/[^\w,\-]/g, '');
答:
38赞
Nick Craver
11/6/2010
#1
只有在底部选择了该选项时,它才会执行此操作:
Disallow insecure . and [^...] in /RegExp/
从文档中:
如果为 true。和 [^...] 不应允许在 RegExp 文本中使用。在安全应用程序中进行验证时,不应使用这些表单。
所以回答你的问题,如果你开始一个正则表达式并检查它,是的,它每次都会抛出错误。问题在于 unicode 字符,您几乎允许其中的任何内容,并且存在潜在的安全问题或绕过验证的问题。与其禁止某些内容(可以绕过),不如只允许有效的字符。^
评论
3赞
Thomas R
11/6/2010
Blergh,JSLint 是否不够聪明,无法看到我正在替换除这些东西之外的所有东西?string.match(/[\w,\-]/g, '').join('') 那么。
15赞
xj9
11/6/2010
@Tom JSLint 并不在乎你在做什么,它只是提供建议和最佳实践,以防止新手 JavaScript 犯愚蠢的错误。如果你能用各种方式证明你正在做的事情是合理的,那就去做吧,但不要抱怨 JSList 不喜欢它。
18赞
ErikE
7/7/2011
抱怨 JSLint 过于严格是全世界完美专业人士的消遣。
4赞
8/24/2012
你不想知道 JSLint 的真相......因为你无法处理真相!
0赞
dugokontov
10/30/2013
#2
考虑使用代替\W
/^\w/
"!$7s-gd,&j5d-a#".replace(/\W/g, '');
对于您的特定情况,这是行不通的,因为您想留下逗号和破折号字符,但我认为值得一提。
6赞
David Morrow
6/24/2014
#3
regexp: true
在您的 lint 选项中,将允许
. and [^...] in /RegExp/
您可以在此处配置要使用的规则
评论