JSLint "insecure ^" в регулярном выражении


JSLint сообщает небезопасное '^' для следующей строки. Почему это так? Или он просто будет жаловаться каждый раз, когда я захочу отрицать класс персонажей?

// remove all non alphanumeric, comma and dash characters
"!$7s-gd,&j5d-a#".replace(/[^w,-]/g, '');
3 42

3 ответа:

Это будет сделано только в том случае, если у вас есть опция, выбранная внизу:

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

Из документов:

Верно, если . и [^...] не должно допускаться в литералах регулярного выражения. Эти формы не следует использовать при проверке в защищенных приложениях.

Итак, ответ на ваш вопрос, если вы начинаете регулярное выражение с ^ и оно проверено, да, оно будет выдавать ошибку каждый раз. Проблема в том, что с символами Юникода вы позволяете почти все, что там есть и существует вероятность возникновения проблем с безопасностью или проблем с проверкой в обход. Вместо того, чтобы запрещать что-то (что можно обойти), разрешить только те символы, которые допустимы.

regexp: true

В ваших вариантах Линта, позволит

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

Вы можете настроить правила, которые вы хотели бы использовать здесь

Http://www.jslint.com/

Рассмотрите возможность использования \W вместо /^\w/

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

Для вашего конкретного случая это не сработает, потому что вы хотите оставить символы запятой и тире, но я думаю, что это стоит упомянуть.