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

Zha*_*ami 9 regex jslint

我试图让我的Javascript代码100%JSLint干净.

我有一个正则表达式:

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

JSLint报道:

 Insecure '^'
Run Code Online (Sandbox Code Playgroud)

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

Ala*_*ore 8

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

而不是禁用警告,我会改写字符类来匹配你的人物希望允许,从这个表达式正则表达式食谱做:

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
Run Code Online (Sandbox Code Playgroud)


Zha*_*ami 5

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

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

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

/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
Run Code Online (Sandbox Code Playgroud)