Как преобразовать мое регулярное выражение, обнаруживающее 127.0.0.1/8 IP, в более безопасное?

Чтобы обнаружить все IP в 127.0.0.1/8 сеть, я использую это общее регулярное выражение:

/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/

Работа выполнена, но кодировка через es-lint обнаруживает это регулярное выражение как небезопасное.

Я уже читал этот блог, этот вопрос о стековом потоке, но я не владею регулярным выражением и не понимаю всех объяснений.

Я пытался добавить [^,\r\n] во многих позициях, но это не работает.

Вот инструменты для проверки регулярного выражения: https://regex101.com/r/YbYrcd/1

Вот мой код javascript, обнаруженный eslint как небезопасное регулярное выражение:

window.location.hostname.match(
  /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)

Как преобразовать вышеупомянутое регулярное выражение в более безопасное, которое соответствует eslint?

1 ответ

Решение

Eslint выдает предупреждение, потому что ваше регулярное выражение содержит количественную группу, содержащую операторы чередования и квантификаторы внутри. В действительности, поскольку ограничивающий квантификатор только "повторяет" шаблон трижды, шаблон довольно безопасен, но Эслинт не может этого сделать.

Чтобы избавиться от предупреждения, разверните / разверните определенную группу (= повторите . + шаблон октетов три раза):

/^127\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

Посмотреть демо-версию регулярного выражения

Другие вопросы по тегам