Как преобразовать мое регулярное выражение, обнаруживающее 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]?)$/
Посмотреть демо-версию регулярного выражения