Подтвердить что ты не робот

JSLint "небезопасно" в регулярном выражении

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

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

Ответ 1

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

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

От документы:

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

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

Ответ 2

regexp: true

в настройках lint, позволит

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

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

http://www.jslint.com/

Ответ 3

Используйте \W вместо /^\w/

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

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