Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка IP адреса. Просьба протестировать у себя код. (https://javascript.ru/forum/misc/39240-proverka-ip-adresa-prosba-protestirovat-u-sebya-kod.html)

ed-210 21.06.2013 22:46

Проверка IP адреса. Просьба протестировать у себя код.
 
Задача скрипта позволять вводить адреса в такой форме:
для IPv4 - 1-255.0-255.0-255.1-255
для IPv6 - 1-255.0-255.0-255.0-255.0-255.1-255
var ip = prompt('Проверка корректности записи IP адресов.\nВведите IP адрес:');
var reg = /^(2[0-5][0-5]|1\d\d|[1-9](?=\d)\d|[1-9])((\.(2[0-5][0-5]|1\d\d|[1-9](?=\d)\d|\d)){2}|(\.(2[0-5][0-5]|1\d\d|[1-9](?=\d)\d|\d)){4})\.(2[0-5][0-5]|1\d\d|[1-9](?=\d)\d|[1-9])$/;

var result, resultLength;
if (result = ip.match(reg)){

    resultLength = result[0].split('.').length;
	alert('Это правильный IPv'+ resultLength +' адрес:\n'+ result[0]);

} else {

    alert('Введенный вами адрес - ['+ ip +'] не корректен!');

}

Прошу протестировать и выразить свои мысли по поводу решения задачи. Большое спасибо заранее! :)

nerv_ 21.06.2013 23:49

регами такое не проверяют. split и сравнивать как число

ruslan_mart 23.06.2013 13:04

function IP(a)
{
   a = a.split('.');
   for(i=0; i<a.length; i++) if(!a[i] || a[i] > 255) return false;
   return true;
}


Может, как-то так :)

sexyQuery 23.06.2013 16:00

function isIPv4(addr) { 
    return /^(([01]?\d{1,2}|2[0-4]\d|25[0-5])(\.|$)){4}$/.test(addr);
}

sexyQuery 23.06.2013 16:03

диапазоны для IPv6 0x0-0xFFFF

melky 23.06.2013 19:40

а кто сказал, что ИПшники могут быть записаны только как циферки?

sexyQuery 24.06.2013 02:55

ipv6


/^([\da-f]{1,4}:){7}([\da-f]{1,4}|(([01]?\d{1,2}|2[0-4]\d|25[0-5])(\.|$)){4})$/i.test('0001:2222:3456:7890:abcd:e:fff:12.34.56.78')
true
/^([\da-f]{1,4}:){7}([\da-f]{1,4}|(([01]?\d{1,2}|2[0-4]\d|25[0-5])(\.|$)){4})$/i.test('2001:db8:1234:0000:0000:0000:0000:0000')
true

sexyQuery 24.06.2013 20:13

вот моя регулярка те на 1088 знаков работает как часы, разобраться не пытайся, она генерированная

/^(([\da-f]{1,4}:){7}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|::(([\da-f]{1,4}:){0,6}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))?)?|([\da-f]{1,4}:){0,6}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))?::|([\da-f]{1,4}:):([\da-f]{1,4}:){0,5}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|([\da-f]{1,4}:){1,2}:([\da-f]{1,4}:){0,4}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|([\da-f]{1,4}:){1,3}:([\da-f]{1,4}:){0,3}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|([\da-f]{1,4}:){1,4}:([\da-f]{1,4}:){0,2}([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|([\da-f]{1,4}:){1,5}:([\da-f]{1,4}:)?([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5]))|([\da-f]{1,4}:){1,6}:([\da-f]{1,4}|(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])))$/i

sexyQuery 24.06.2013 20:15

это для ipv6
::
::1
1::
1:2:3:4:5:6:7:8
1:2:3::4:5:6:7
0Ffa::127.0.0.1

sexyQuery 24.06.2013 20:18

я так понял ipv4 может быть только на конце


Часовой пояс GMT +3, время: 19:22.