9

Javascriptコードを100%JSLintでクリーンにしようとしています。

私は正規表現を持っています:

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

JSLintレポート:

 Insecure '^'

文字セット「安全でない」の否定を利用する理由は何ですか?

4

3 に答える 3

8

[^\s;|\\*'"!,()<>]リストされているもの以外のASCII文字、および非ASCII文字に一致します。JavaScript文字列はUnicodeに対応しているため、Unicodeで認識されているすべての文字を意味します。そこにはいたずらの可能性がたくさんあります。

警告を無効にするのではなく、正規表現クックブックのこの正規表現が行うように、許可たい文字に一致するように文字クラスを書き直します。

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
于 2010-06-14T23:38:10.810 に答える
5

(私自身の質問に答える)私はいくつか掘り下げました...JSLintのドキュメントには次のように書かれています:

安全でないことを禁止します。と[^...]。/ RegExp / regexp内:。の場合はtrue。および[^...]はRegExpリテラルでは許可されるべきではありません。安全なアプリケーションで検証する場合は、これらのフォームを使用しないでください。

私が行ったことは、問題のある行のJSLintエラーを無効にすることです(潜在的に悪意のあるユーザー入力から保護する必要があることを扱っていないため:

/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
于 2010-06-14T19:13:55.050 に答える
0

次を使用する必要があります。

/*jslint regexp: true*/
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;
/*jslint regexp: false*/
于 2015-06-29T13:25:19.093 に答える