Handmade IPv4 Validation

by Erick Petrucelli

TypeScript

function isValid(s) {
  const groups = s.split('.');
  if (groups.length !== 4) return false;
  if (groups.some((item) => !item.trim())) return false;
  const numbers = groups.map((item) => Number(item));
  if (numbers.some((number) => isNaN(number))) return false;
  if (numbers.some((number) => number < 0 || number > 255)) return false;
  if (numbers.some((number, i) => `${number}`.length !== groups[i].length)) return false;
  if (numbers.every((number) => number === 0)) return true;
  if (numbers[0] === 0) return false;
  return true;
}

function log(input, expected) {
	document.write(`<pre>${input}: <b>${isValid(input)}</b> <small>// ${expected}</small></pre>`);
}

log('192.168.0.1', true);
log('222.111.111.111', true);
log('0.0.0.0', true);
log('41.74.72.66', true);
log('1.172.255.255', false);
log('01.01.01.01', false);
log('172.a.10.0', false);
log('255..255.255', false);
log('5555..555', false);
log('0.0.0.255', false);
log('19.132.268.45', false);