Skip to content

Instantly share code, notes, and snippets.

@andreyselin
Last active February 4, 2020 02:23
Show Gist options
  • Save andreyselin/658084c05d4134996712cdcce73a3ae3 to your computer and use it in GitHub Desktop.
Save andreyselin/658084c05d4134996712cdcce73a3ae3 to your computer and use it in GitHub Desktop.

Напишите алгоритм валидации IPv4 адреса в Dot-десятичной нотации. IP является валидным, если состоит из четырех октетов, со значениями от 0 до 255 включительно. На вход функции подается строка. На выходе ожидается булево значение true или false

Примеры

Валидные: 1.2.3.4, 123.45.67.89

Невалидные: 1.2.3, 1.2.3.4.5, 123.456.78.90, 123.045.067.089

Обратите внимание, что запись с ведущими нулями (например, 01.02.03.04) так же невалидна.

@LakaevAlex
Copy link

LakaevAlex commented Nov 28, 2019

function check(ipString) {
const octets = ipString.split('.');
if(octets.length !== 4) {
return false;
}

return octets.reduce((m,v) => {
const val = parseInt(v);
return m + (v.charAt(0) !== '0' && val >= 0 && val <= 255 ? 1 : 0)
}, 0) === 4;
}

console.log(check("1.2.3.4"));
console.log(check("123.45.67.89"));

console.log(check("123.123.123.01.123"));
console.log(check("123.045.067.089"));
console.log(check("1.2.3"));
console.log(check("1.2.3.4.5"));
console.log(check("123.456.78.90"));
console.log(check("123.045.067.089"));
console.log(check("01.02.03.04"));

и parseInt вам теперь нормально, и вот эта 123.123.123.01.123 хуйня не пролетит

check('1.2k.3.255')
слабонервным не смотреть
check("a" + confirm(function() {window.location.href = "https://gex.at.ua/"; return'kek' }()) + 'b')

@vugluskr86
Copy link

vugluskr86 commented Nov 29, 2019

function check(ipString) {
	const octets = ipString.split('.');
	if(octets.length !== 4) {
		return false;
	}

	return octets.reduce((m,v) => {
		if(!/\D/.test(v) && v.charAt(0) !== '0') {
			const val = parseInt(v);
			return m + (val >= 0 && val <= 255 ? 1 : 0)
		}
	}, 0) === 4;
}

check('1.2k.3.255') === false

check("a" + confirm(function() {window.location.href = "https://gex.at.ua/"; return'kek' }()) + 'b')
А вот это просто херня какая-то

Конечно можно проще регулярными выражениями проверить, как выше было предложено, но тогда весь смысл замеса теряется :)

@aeberzin
Copy link

function check(ipString) {
	const octets = ipString.split('.');
	if(octets.length !== 4) {
		return false;
	}

	return octets.reduce((m,v) => {
		if(!/\D/.test(v) && v.charAt(0) !== '0') {
			const val = parseInt(v);
			return m + (val >= 0 && val <= 255 ? 1 : 0)
		}
	}, 0) === 4;
}

check('1.2k.3.255') === false

check("a" + confirm(function() {window.location.href = "https://gex.at.ua/"; return'kek' }()) + 'b')
А вот это просто херня какая-то

Конечно можно проще регулярными выражениями проверить, как выше было предложено, но тогда весь смысл замеса теряется :)

const check = (ip) => ip.split('.').reduce((m,v) => m + (/^[1-9]\d*$/.test(v) && parseInt(v) <= 255 ? 1 : 5), 0) === 4;

@vugluskr86
Copy link

function check(ipString) {
	const octets = ipString.split('.');
	if(octets.length !== 4) {
		return false;
	}

	return octets.reduce((m,v) => {
		if(!/\D/.test(v) && v.charAt(0) !== '0') {
			const val = parseInt(v);
			return m + (val >= 0 && val <= 255 ? 1 : 0)
		}
	}, 0) === 4;
}

check('1.2k.3.255') === false

check("a" + confirm(function() {window.location.href = "https://gex.at.ua/"; return'kek' }()) + 'b')
А вот это просто херня какая-то

Конечно можно проще регулярными выражениями проверить, как выше было предложено, но тогда весь смысл замеса теряется :)

const check = (ip) => ip.split('.').reduce((m,v) => m + (/^[1-9]\d*$/.test(v) && parseInt(v) <= 255 ? 1 : 5), 0) === 4;

Идеально 🥇

@kickboxer
Copy link

function checkIP(ip) {
  if (typeof ip !== 'string') return false;
  const arr = ip.split('.');
  if (arr.length !== 4) return false;
  return arr.every(n => n >= 0 && n < 256);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment