Я пытаюсь получить свой код JavaScript 100%-й чистый JSLint.
У меня есть регулярное выражение:
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
JSLint сообщает:
Insecure '^'
Что делает использование из отрицания набора символов "небезопасным"?
[^ \ s; | \\ * '"!, ( ) <>]
соответствует любому символу ASCII, кроме перечисленных, и любому символу, отличному от ASCII. Поскольку строки JavaScript поддерживают Юникод, это означает, что каждый символ, известный в Юникоде. Я вижу большой потенциал для вреда .
Вместо того, чтобы отключать предупреждение, я бы переписал класс символов, чтобы он соответствовал символам, которые вы do хотите разрешить, как это регулярное выражение из Поваренной книги регулярных выражений :
/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
(отвечая на свой вопрос) Я немного покопался ... В документации JSLint говорится:
Disallow insecure. и [^ ...]. в / RegExp / regexp: истина, если. и [^ ...] не должны использоваться в литералах RegExp. Эти формы не следует использовать при проверке в защищенных приложениях.
Что я сделал, так это отключил ошибку JSLint для нарушающей строки (поскольку я не имею дело с необходимостью защиты от потенциально злонамеренного ввода пользователя:
/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/