正则表达式中的 JSLint“不安全 ^”

IT技术 javascript regex jslint regex-negation
2021-02-21 12:34:14

JSLint 报告以下行的不安全“^”这是为什么?或者它会在我想否定一个角色类的任何时候抱怨吗?

// remove all non alphanumeric, comma and dash characters
"!$7s-gd,&j5d-a#".replace(/[^\w,\-]/g, '');
3个回答

如果您在底部选择了选项,它只会执行此操作:

Disallow insecure . and [^...] in /RegExp/

文档

真如果。和 [^...] 不应该出现在 RegExp 文字中。在安全应用程序中进行验证时,不应使用这些表单。

所以回答你的问题,如果你开始一个正则表达式^并检查它,是的,它每次都会抛出错误。问题在于 unicode 字符,您几乎可以在其中使用任何内容,并且可能会出现安全问题或绕过验证的问题。而不是禁止某些东西(可以绕过),允许哪些字符是有效的。

你不想知道关于jslint的真相......因为你无法处理真相!
2021-04-28 12:34:14
Blergh,JSLint 是不是不够聪明,无法看到我正在替换这些之外的所有内容?string.match(/[\w,\-]/g, '').join('') 那么。
2021-05-06 12:34:14
@Tom JSLint不在乎你在做什么,它只是提供建议和最佳实践,以防止 JavaScript 新手犯愚蠢的错误。如果你能证明你所做的一切都是合理的,那就去做,但不要抱怨 JSList 不喜欢它。
2021-05-09 12:34:14
抱怨 JSLint 过于严格是世界各地的专业人士的消遣。
2021-05-14 12:34:14

regexp: true

在您的 lint 选项中,将允许

. and [^...] in /RegExp/

你可以在这里配置你想使用的规则

http://www.jslint.com/

考虑使用\W代替/^\w/

"!$7s-gd,&j5d-a#".replace(/\W/g, '');

对于您的特定情况,这不起作用,因为您想留下逗号和破折号字符,但我认为值得一提。