webentwicklung-frage-antwort-db.com.de

JSLint "insecure ^" im regulären Ausdruck

JSLint meldet unsicheres '^' für die folgende Zeile. Warum das? Oder wird es sich immer beschweren, wenn ich eine Charakterklasse negieren möchte?

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

Dies geschieht nur, wenn Sie die Option unten ausgewählt haben: 

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

Von den Dokumenten :

wahr wenn. und [^ ...] sollte in RegExp-Literalen nicht zulässig sein. Diese Formulare sollten bei der Validierung in sicheren Anwendungen nicht verwendet werden.

Wenn Sie also eine Regex mit ^ starten, wird die Frage beantwortet. Ja, es wird jedes Mal der Fehler ausgegeben. Bei dem Problem handelt es sich um Unicode-Zeichen. Sie erlauben so ziemlich alles, und es besteht die Möglichkeit, dass Sicherheits- oder Validierungsprobleme auftreten. Anstelle von nicht zulassen etwas (was umgangen werden kann), allow nur welche Zeichen gültig sind.

38
Nick Craver

regexp: true

in Ihren Fusseln Optionen zulassen 

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

hier können Sie die Regeln konfigurieren, die Sie verwenden möchten

http://www.jslint.com/

6
David Morrow

Erwägen Sie, \W anstelle von /^\w/ zu verwenden.

"!$7s-Gd,&j5d-a#".replace(/\W/g, '');

Für Ihren speziellen Fall würde dies nicht funktionieren, weil Sie Komma- und Bindestrich-Zeichen hinterlassen möchten, aber ich denke, es ist erwähnenswert.

0
dugokontov