webdevqa.jp.net

正規表現でのJSLint "安全でない^"

JSLintは、次の行について安全でない '^'を報告します。何故ですか?それとも、キャラクタークラスを否定したいときに不平を言うだけですか?

// remove all non alphanumeric, comma and dash characters
"!$7s-Gd,&j5d-a#".replace(/[^\w,\-]/g, '');
43
Thomas R

下部でオプションが選択されている場合にのみ、これが行われます。

Disallow insecure . and [^...] in /RegExp/

the docs から:

真の場合。 [^ ...]はRegExpリテラルでは許可されません。安全なアプリケーションで検証する場合は、これらのフォームを使用しないでください。

したがって、あなたの質問に答えてください。もし^で正規表現を開始し、それがチェックされている場合、はい、毎回エラーをスローします。問題はユニコード文字にあり、そこではほとんど何でも許可しており、セキュリティの問題、または検証のバイパスの問題の可能性があります。 許可しない何か(これはバイパスできる)の代わりに、許可する何だけか文字が有効です。

38
Nick Craver

regexp: true

あなたのlintオプションで、

. and [^...] in /RegExp/

ここで使用するルールを設定できます

http://www.jslint.com/

6
David Morrow