Javascriptコードを100%JSLintでクリーンにしようとしています。
私は正規表現を持っています:
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
JSLintレポート:
Insecure '^'
文字セット「安全でない」の否定を利用する理由は何ですか?
[^\s;|\\*'"!,()<>]
リストされているもの以外のASCII文字、および非ASCII文字に一致します。JavaScript文字列はUnicodeに対応しているため、Unicodeで認識されているすべての文字を意味します。そこにはいたずらの可能性がたくさんあります。
警告を無効にするのではなく、正規表現クックブックのこの正規表現が行うように、許可したい文字に一致するように文字クラスを書き直します。
/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
(私自身の質問に答える)私はいくつか掘り下げました...JSLintのドキュメントには次のように書かれています:
安全でないことを禁止します。と[^...]。/ RegExp / regexp内:。の場合はtrue。および[^...]はRegExpリテラルでは許可されるべきではありません。安全なアプリケーションで検証する場合は、これらのフォームを使用しないでください。
私が行ったことは、問題のある行のJSLintエラーを無効にすることです(潜在的に悪意のあるユーザー入力から保護する必要があることを扱っていないため:
/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
次を使用する必要があります。
/*jslint regexp: true*/
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
/*jslint regexp: false*/