9

我正在尝试让我的 Javascript 代码 100% JSLint 干净。

我有一个正则表达式:

 linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;

JSLint 报告:

 Insecure '^'

是什么让字符集的否定“不安全”?

4

3 回答 3

8

[^\s;|\\*'"!,()<>]匹配除所列字符之外的任何 ASCII 字符,以及任何非 ASCII 字符。由于 JavaScript 字符串可以识别 Unicode,这意味着 Unicode 可以识别每个字符。我可以看到那里有很多恶作剧的可能性。

我不会禁用警告,而是重写字符类以匹配您确实想要允许的字符,就像正则表达式食谱中的这个正则表达式一样:

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
于 2010-06-14T23:38:10.810 回答
5

(回答我自己的问题)我做了一些挖掘...... JSLint 文档说:

禁止不安全的。和 [^...]。在 /RegExp/ 正则表达式中:如果 . 并且 [^...] 不应该在 RegExp 文字中被允许。在安全应用程序中进行验证时,不应使用这些表单。

我所做的是禁用有问题的行的 JSLint 错误(因为我不需要处理潜在的恶意用户输入的安全问题:

/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
于 2010-06-14T19:13:55.050 回答
0

你应该使用:

/*jslint regexp: true*/
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
/*jslint regexp: false*/
于 2015-06-29T13:25:19.093 回答