Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проверка на IP адрес.


Автор: InfMag 3.4.2005, 09:24
Люди, плиз, подскажите мне preg_match, ergei или еще чего, чтобы определить IP ли это адрес.
Типа чтобы было четыре числа между тремя точками и каждый числами от 0 до 255 или как там правильнее. Помоему первое число не может равняться нулю... smile

Автор: Mal Hack 3.4.2005, 10:49
рэгом геморройно. Проще. Разбей explode по точкам. Если получаешь не 4 элемента это не IP.
Затем проверяешь каждое на is_int(); и больше 1 меньше 255..

Автор: Opik 3.4.2005, 11:31
Юзай ip2long
Цитата
The function ip2long() generates an IPv4 Internet network address from its Internet standard format (dotted string) representation. If ip_address is invalid then -1 is returned. Note that -1 does not evaluate as FALSE in PHP.

Автор: InfMag 6.4.2005, 16:44
Opr
Че-го то я не понял про ip2long


Mal Hack
is_int() и ему подобным я не доверяю, помню про траблы, если минусы или нули подписывать. Ошибки мне не нужны.
И почему с регами геморойно? Их писать долго? А на практике что будет быстрее, реги или "система нипиль" smile ?

Автор: Mal Hack 6.4.2005, 16:48
Цитата(InfMag @ 6.4.2005, 17:44)
is_int() и ему подобным я не доверяю,

Надо уметь применять...
Цитата(InfMag @ 6.4.2005, 17:44)
если минусы или нули подписывать.

Это мало что изменит.

Цитата(InfMag @ 6.4.2005, 17:44)
И почему с регами геморойно?

В регулярках условий нет (вроде)... А без них - никак.

Автор: InfMag 6.4.2005, 16:57
Mal Hack
Не раскажешь как пользоваться is_int()'ом?

Автор: Mal Hack 6.4.2005, 17:58
http://php.net/is_int

Автор: InfMag 7.4.2005, 10:59
Mal Hack
Неа. Я имел виду: как правильно им пользоваться?

Автор: Opik 7.4.2005, 18:44
InfMag
а че тут непонятно?
Код

if(ip2long($_SERVER['REMOTE_ADDR']) == -1)
{
 print 'invalid IP';
}
else
{
 print 'valid IP';
}

Автор: Gold Dragon 8.4.2005, 08:35
Mal Hack
наверное лучше и правильнее быдет использовать is_numeric. Так как получается не число в итоге, а числовая строка

Вот мой карявенький код smile
Код

$ip = '198.24.86.1';
$id = Array ('Всё отлично','Фигушки, это не IP`шник');
$ind = 0;

$ip_array = explode('.', $ip);

if (count($ip_array)==4)
{
for ($i=0;$i<4;$i++){
     if (is_numeric($ip_array[$i]))
     {
        if (($ip_array[$i]<0) or ($ip_array[$i]>255)){$ind=1;}
     }
     else{$ind=1;}
}
}
else{$ind=1;}

echo $id[$ind];


Автор: skalex 8.4.2005, 09:30
Цитата
В регулярках условий нет (вроде)...

Как это нету... Вот синтаксис регулярного выражения с условием:
Код
(?(условие)шаблон1)

или
Код
(?(условие)шаблон1|шаблон2)

Подробная информация: http://ru.php.net/manual/ru/reference.pcre.pattern.syntax.php (абзац "Условные подмаски")

P.S.
А вообще надо использовать, вариант, предлагаемый Opr!!!

Автор: IZ@TOP 8.4.2005, 10:17
А не проще таким образом поступить:
Код

<?php
$IP = '192.168.1.254';
preg_match("|^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$|", $IP, $M);
print_r($M);
if(($M[1] <= 255) && ($M[2] <= 255) &&($M[3] <= 255) && ($M[4] < 255)) {
    echo "IP is valid";
} else {
    echo "IP is invalid";
}
?>

Автор: Ринат 8.4.2005, 12:54
IZ@TOP прикольный вариант..рег понравился, простой главное smile интересный способ...

Автор: InfMag 8.4.2005, 18:32
Opr
А ip2long() от каких версий начинается?

Автор: skalex 8.4.2005, 20:42
Цитата
ip2long() от каких версий начинается?

Начиная с 4-ой.

Автор: Opik 8.4.2005, 23:57
IZ@TOP
дык, нафига это? 8)

Автор: InfMag 9.4.2005, 17:10
Opr
Ну дык я вот и думаю: зачем мне реги, експлоды и т.п. То-бишь зачем новый велосипед собирать? smile

Автор: IZ@TOP 10.4.2005, 13:18
Opr, чтобы убедиться в валидности IP.

Автор: Opik 11.4.2005, 09:18
IZ@TOP
а чем тебя стандартная функция не устраивает?

Автор: IZ@TOP 11.4.2005, 10:04
Opr, как альтернатива smile А про встроенный я ненал smile

Автор: Opik 11.4.2005, 12:36
IZ@TOP
узнал и продолжаешь 8))))
соррь, за оффтоп 8)

Автор: InfMag 11.4.2005, 14:36
smile Тему нужно просто закрыть.
IZ@TOP
Ты же вроде модератор? Тему пора закрывать.
Добавлено @ 14:37
Opr
А, ну да. Тыж тоже модер. Закрывай. smile

Автор: Opik 11.4.2005, 14:39
пусть будет.

Автор: InfMag 12.4.2005, 11:42
Поглядите что я нашел:
Код

function valid_ipv4($ip_addr)
{

       $num="(\*|[0-9]{1,3}|^1?\d\d$|2[0-4]\d|25[0-5])";

       if(preg_match("/$num\.$num\.$num\.$num/",$ip_addr,$matches))
       {
           print_r ($matches);
               return $matches[0];
       } else {
               return false;
       }
}

Это было на http://ru3.php.net/manual/ru/function.preg-match.php
Скажите, это на 100 процентов проверит валидность IP. Просто интересно.
Добавлено @ 11:43
Код


<?
function valid_ipv4($ip_addr)
{
       $num="([0-9]|^1?\d\d$|2[0-4]\d|25[0-5])";

       if(preg_match("/$num\.$num\.$num\.$num/",$ip_addr,$matches))
       {
               return $matches[0];
       } else {
               return false;
       }
}
?>

Вот еще от туда же.

Автор: Opik 13.4.2005, 07:28
Вариантов куча. самый простой и надежный - ip2long

Автор: InfMag 14.4.2005, 07:11
Opr
Про ip2long я уже понял.
Цитата
Просто интересно.

Я хотел узнать на 100 ли процентов это подтвердит валидность IP'шника?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)