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);