Diskuze: regulární výraz pro kontrolu ip adresy
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jednak můžeš psát [0-9] (nebo jen \d) a taky můžeš uvést přesný počet opakování do složených závorek. Musíš počítat s tím, že v IP může každé číslo být 0-255 tedy jedna až tři číslice. preg_match by mohl vypadat nějak takto:
preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $ip)
\d zastupuje jakoukoli číslici, výraz {1,3} zopakuje předchozí znak (tedy \d - libovolnou číslici) jednou až tři krát.
Problém takového testu je, že v něm projde i IP adresa od Sandry Bullock "23.75.345.200". Lepší by bylo takovou adresu přečíst jako 4 celá čísla oddělená tečkami a vyhodnotit, zda je každé číslo v rozsahu 0-255.
Ještě lepší by bylo, kdyby ta funkce rovnou konvertovala adresu do 32bitového integeru a v případě neúspěchu vyhodila výjimku. S takovou funkcí by se pracovalo mnohem lépe a byla by užitečnější.
Díval jsem se, že PHP má nějakou validaci:
http://php.net/…lidation.php
Máš s tím nějakou zkušenost?
Pokud taková funkce existuje, je vždy dobré ji využít. Neznal jsem ji a hned jsem ji vyzkoušel:
<?php
function filtr($ip) {
echo $ip,filter_var($ip, FILTER_VALIDATE_IP)?" platná":" neplatná","\n";
}
filtr('127.0.0.1');
filtr('327.0.0.1');
filtr('127.200.0.1');
filtr('127.256.0.1');
filtr('127.255.0.255');
filtr('23.75.345.200');
Výsledek:
127.0.0.1 platná
327.0.0.1 neplatná
127.200.0.1 platná
127.256.0.1 neplatná
127.255.0.255 platná
23.75.345.200 neplatná
Nejlepší bude, když uvedu na co to chci. Třeba to někomu pomůže.
Tvořím administraci webu, a tuto kontrolu potřebuji pro zadání ip adresy do
formuláře. Pro zadanou IP adresu bude web nepřístupný.
V tom případě bude asi funkce
filter_var($ip, FILTER_VALIDATE_IP)
to pravé.
function is_ip($ip){
return is_string(filter_var($ip, FILTER_VALIDATE_IP));
}
na http://www.php.net/…validate.php
jsou k dispozici další možnosti filtrování IP.
Zobrazeno 7 zpráv z 7.