我正在尝试将我的Javascript代码100%JSLint清理干净。
我有一个正则表达式:
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
JSLint报告:
Insecure '^'
是什么使得对字符集的否定使用“不安全”?
答案 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*/