Portál AbcLinuxu, 10. května 2025 04:45
Řešení dotazu:
10.125.0.5 - 10.235.2.5: ^10\.((1(2[5-9]|[3-9][0-9])|2([0-2][0-9]|3[0-4]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|235\.(([0-1])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|2\.([0-5])))$
class IPRange { function __construct($begin, $end) { $this->begin = $this->compute($begin); $this->end = $this->compute($end); } private function compute($ip) { $rv = 0; foreach (array_reverse(explode('.', $ip)) as $i => $val) { $rv += intval($val) * pow(256, $i); } return $rv; } function contains($ip) { $val = $this->compute($ip); return $val >= $this->begin && $val <= $this->end; } } $range = new IPRange('10.125.0.5', '10.235.2.5'); var_dump($range->contains($ip));PS: je to zjednoduseny, chybi tam nejaka validace ip adresy a mozna jsou tam i nejaky dalsi chyby ;]
<off_topic>
No nevím, tak jsem do toho webového generátoru zkušebně zadal od fdcc::
do fdcc::7
a tvrdí to Invalid Ip Address: Must have 4 parts. No bezva, další nefunkční a nepoužitelná webová utilita. (Ano, jsem silně alergický na utility, distribuce nebo konfiguráky zamrzlé v 70. až 90. letech 20. století.)
</off_topic>
Ono to i pro jakýkoli trochu netriviální IPv4 rozsah suše zahlásí, že výsledný regulární výraz by byl moc dlouhý pro ten Google Analytics filtr, takže je zřejmé, že je to zamýšleno jako jednoúčelová utilitka obcházející nedokonalost toho filtru.
Ruku na srdce, už ten příklad výše by měl každého, koho aspoň trochu zajímá efektivita, přimět, aby se zamyslel nad otázkou, jak je asi náročné otestovat, zda je IP adresa v určeném rozsahu, a jak je proti tomu náročné otestovat match její textové reprezentace proti tomu regulárnímu výrazu.
Alespon castecne reseni poskytuje utilita rgxg. Muze se to nekomu hodit:
$ rgxg cidr 192.168.0.0/23
192\.168\.[01]\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
A.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.