web-dev-qa-db-fra.com

JSLint "insecure ^" dans une expression régulière

JSLint indique Insecure '^' pour la ligne suivante. Pourquoi donc? Ou va-t-il simplement se plaindre chaque fois que je veux annuler une classe de personnage?

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

Cela ne le fera que si vous avez l'option sélectionnée en bas: 

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

De les docs :

vrai si. et [^ ...] ne devraient pas être autorisés dans les littéraux RegExp. Ces formulaires ne doivent pas être utilisés lors de la validation dans des applications sécurisées.

Donc, la réponse à votre question, si vous lancez une expression régulière avec ^ et que cela est coché, oui, l'erreur sera renvoyée à chaque fois. Le problème concerne les caractères unicode, vous autorisez à peu près tout ce qui s'y trouve et il existe un potentiel de problèmes de sécurité ou de contournement de la validation. Au lieu de interdire quelque chose (qui peut être contourné), autoriser seuls les caractères valides.

38
Nick Craver

regexp: true

dans vos options de peluches, permettra 

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

vous pouvez configurer les règles que vous souhaitez utiliser ici

http://www.jslint.com/

6
David Morrow

Pensez à utiliser \W au lieu de /^\w/

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

Dans votre cas particulier, cela ne fonctionnerait pas car vous souhaitez laisser des caractères avec des virgules et des tirets, mais je pense que cela vaut la peine de le mentionner.

0
dugokontov