PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
Zdravim, zrovna jsem řešil detekci ip adresy. Všude na netu jsem našel pouze hodně dlouhá, neohrabaná řešení. Dostal jsem takovou myšlenku. Všechny řešení, které jsem našel byla založena na tom, že se ip rozdělila na 3 octety s tečkou a 4. octet. Napadlo mě, že by to možná nemuselo být nutné a tak jsem zkoušel vlastní řešení.
#(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])##((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){4}#"x.x.x.x."#((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.(?!$)){4}##((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])(\.(?!$)|$)){4}##^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])(\.(?!$)|$)){4}$#A teď dotazy na závěr. Našel by někdo nějaký nevalidní řetězec, který by kontrolou prošel? Nebo se opravdu jedná o 100% řešení? Popř. máte někdo nějaké ještě lepší řešení? A není moje řešení náročnější než způsob zmíněný na začátku?
Předem díky
Editoval ZuseX4 (27. 3. 2009 1:59)
Offline
tahle ip adresa rozhodně neprojde: 2001:db8::1428:57ab
Z Javy do PHP nikdy nic dobrého nepřišlo. / http://twitter.com/paranoiq
Offline
paranoiq napsal(a):
tahle ip adresa rozhodně neprojde: 2001:db8::1428:57ab
:) Tušil jsem, že to někdo nadhodí, ale podle mě je situace podobná. Jen se nebude řešit tečka ale dvojtečka. Nebo ještě něco?
Offline
Chýba ti spojovník v prvej hranatej zátvorke. Vylúčil si adresy
251.x.x.x–254.x.x.x. Takisto je otázna platnosť
adresy 000.1.2.3 (tri nuly za sebou), na odstránenie by bolo treba
upraviť výraz napr. takto:
#^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\.(?!$)|$)){4}$#
ZuseX4 napsal(a):
:) Tušil jsem, že to někdo nadhodí, ale podle mě je situace podobná. Jen se nebude řešit tečka ale dvojtečka. Nebo ještě něco?
Bude treba akceptovať aj krátku formu, napr ::1 či minimálne
::, to už asi len tak jednoducho nepôjde.
Editoval kravco (24. 3. 2009 1:46)
Offline
kravco napsal(a):
Chýba ti spojovník v prvej hranatej zátvorke.
Dík, spraveno
Takisto je otázna platnosť adresy
000.1.2.3(tri nuly za sebou)
Díky za info, nevěděl jsem, že tři nuly za sebou je nevalidní zápis
Bude treba akceptovať aj krátku formu, napr
::1či minimálne::, to už asi len tak jednoducho nepôjde.
Má to nějaká specifická pravidla, nebo jde jen o prosté vynechávání?
Editoval ZuseX4 (27. 3. 2009 2:07)
Offline
ZuseX4 napsal(a):
Díky za info, nevěděl jsem, že tři nuly za sebou je nevalidní zápis
Platnosť je z môjho pohľadu otázna, IP adresa je
32-bitové číslo, takýto zápis ho určuje jednoznačne, no existuje aj
kratší, ktorý reprezentuje tú istú adresu… Keď chceš akceptovať
užívateľský vstup, môžeš akceptovať aj 10.000.00.1, no
prezentovať by si mal kanonický zápis.
Bude treba akceptovať aj krátku formu, napr
::1či minimálne::, to už asi len tak jednoducho nepôjde.Má to nějaká specifická pravidla, nebo jde jen o prosté vynechávání?
Dve dvojbodky znamenajú doplnenie nulami, teda ::1
znamená 0000:0000:0000:0000:0000:0000:0000:0001
Editoval kravco (27. 3. 2009 14:13)
Offline