我正在尝试让我的 Javascript 代码 100% JSLint 干净。
我有一个正则表达式:
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
JSLint 报告:
Insecure '^'
是什么让字符集的否定“不安全”?
[^\s;|\\*'"!,()<>]
匹配除所列字符之外的任何 ASCII 字符,以及任何非 ASCII 字符。由于 JavaScript 字符串可以识别 Unicode,这意味着 Unicode 可以识别每个字符。我可以看到那里有很多恶作剧的可能性。
我不会禁用警告,而是重写字符类以匹配您确实想要允许的字符,就像正则表达式食谱中的这个正则表达式一样:
/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
(回答我自己的问题)我做了一些挖掘...... JSLint 文档说:
禁止不安全的。和 [^...]。在 /RegExp/ 正则表达式中:如果 . 并且 [^...] 不应该在 RegExp 文字中被允许。在安全应用程序中进行验证时,不应使用这些表单。
我所做的是禁用有问题的行的 JSLint 错误(因为我不需要处理潜在的恶意用户输入的安全问题:
/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
你应该使用:
/*jslint regexp: true*/
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
/*jslint regexp: false*/