JSLint为我的正则表达式报告“不安全^” - 这是什么意思?

时间:2010-06-14 18:45:35

标签: regex jslint

我正在尝试将我的Javascript代码100%JSLint清理干净。

我有一个正则表达式:

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

JSLint报告:

 Insecure '^'

是什么使得对字符集的否定使用“不安全”?

3 个答案:

答案 0 :(得分:8)

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

我不会禁用警告,而是重写字符类以匹配想要允许的字符,因为来自Regular Expressions Cookbook的正则表达式:

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g

答案 1 :(得分:5)

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

  

禁止不安全。和[^ ...]。 in / RegExp / regexp:如果是,则为true。在RegExp文字中不应该允许[^ ...]。在安全应用程序中进行验证时,不应使用这些表单。

我所做的是禁用违规行的JSLint错误(因为我没有处理需要保护其免受潜在恶意用户输入的攻击:

/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/

答案 2 :(得分:0)

您应该使用:

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