JS. Регулярные выражения . Валидация ip адреса
задача валидировать ip адрес.
Требования по адресам:
- 0.0.0.0:443
- 10.54.42.114
- 255.255.255.255:7777
- 10.60.48.0/20
- 10.102.0.0/16
- 185.71.77.0/27
- 77.75.154.128/25
Мой вариант регулярного выражения учитывает требования : 1, 2, 3, а вот с остальными 4 никак не выходит.
С регулярными выражениями дружу плохо, поэтому буду благодарен за помощь, надо учитывать все 7 вариантов.
Мой код для проверки
const ips = ['0.0.0.0:443', '10.54.42.114', '255.255.255.255:7777', '10.60.48.0/20', '10.102.0.0/16', '185.71.77.0/27', '77.75.154.128/25'];
const regexp_ip_validation = /^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d))(:([1-9]\d{1,3}|[1-6]\d{4}))?$/;
for (const ip of ips) {
console.log(ip, ' --- ', regexp_ip_validation.test(ip));
}
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Ошибка в том, что в вашем регулярном выражении нет поддержки символа косой черты как разделителя между IP-адресом и маской подсети.
Замените : на [\/:] и используйте
/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)(?:[\/:]([1-9]\d{1,3}|[1-6]\d{4}))?$/
Я заменил захватывающие подмаски незахватывающими.
const ips = ['0.0.0.0:443', '10.54.42.114', '255.255.255.255:7777', '10.60.48.0/20', '10.102.0.0/16', '185.71.77.0/27', '77.75.154.128/25'];
const regexp_ip_validation = /^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)(?:[\/:]([1-9]\d{1,3}|[1-6]\d{4}))?$/;
for (const ip of ips) {
console.log(ip, ' --- ', regexp_ip_validation.test(ip));
}