RegExp метод test, почему true

291
13 ноября 2017, 22:57

var re = /((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)/; 
var str4 = "1300.6.7.8"; 
console.log(re.test(str4));

почему тест выдаёт тру, объясните пожалуйста. цель - проверяю IP v.4 address

Answer 1

Потому что ты забыл проверку на начало и конец строки, из-за чего находится подстрока:

var re = /((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)/; 
var str4 = "1300.6.7.8"; 
console.log(str4.match(re)); 
 
var re2 = /^(((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d))$/; 
console.log(str4.match(re2)); 
console.log(re2.test(str4));

Answer 2

Лучше обойтись без регулярных выражений:

function isIPv4(ip) { 
  let parts = ip.split('.'); 
  if (parts.length !== 4) return false; 
  return parts.map(p => +p) 
       .every(p => p >= 0 && p < 256);     
} 
 
[ 
  '127.0.0.1', 
  '1.2a.3.4', 
  '256.0.0.0' 
].forEach(ip => console.log(ip, isIPv4(ip)));

READ ALSO
Получение тела запроса в nodejs

Получение тела запроса в nodejs

у меня есть функция на сайте, которая отправляет запрос на мой сервер:

257
VS CODE Chrome Debugger не работает

VS CODE Chrome Debugger не работает

Когда запускаю отладку HTML файла, то вне зависимости от браузера вижу такую картинуА в Brackets или PHPStorm нормально работает отладка, мне понравился...

326
Не подключаются фотки webpack

Не подключаются фотки webpack

Когда запускаю сборку webpack локально для фронтенда то все работает и фотки собираются

330