Kontrola zadane IP Delphi
Zdravím, jsem začatečnik a nějak nemohu zjistit kde je kopanec.
Potřebují zjistit zda je řetězec platna IP adresa.
Našel jsem toto.
http://www.delphitricks.com/source-code/internet/c heck_if_a_string_is_a_valid_ip_address.html
Hlasi to že IP je OK i když je čilo vižši jak 255
Když zadam třeba IP 999.999.999.999 tak to pořad považuje za platnou IP.
Celý jsem to nečetl, ale je Ti jasné, že to je NEGACE - ta funkce se jmenuje jeToKurvaŠpatně, tzn:
TRUE = špatná IP
FALSE= dobrá ip
To je len sprostá kontrola stringu, či je syntax zadanej IP správna a už vôbec ten algoritmus porovnávania nedá odpoveď na to, či je IP platná alebo nezmysel...
Ak sa s tým chceš trápiť - môžeš...
Inak si stiahni knižnicu synapse.
Stačí použiť 2 unity:
synautil.pas
synaip.pas
IP overíš nasledovnou funkciou zo synaip:
Samozřejmě že dá odpověd na to jestli je IP platná.
Nemáme žádnou standardizovanou strukturu/objekt pro IP a proto je vstupní IP vždy string a proto vždy odpověd bude PARSE STRING. IP je platná +/- vždy, když je správně syntax, mimo případu nějakých speciálních hodnot a ty jsou zrovna popsané spíše v tom prvním algoritmus.
To tvé isIP ze synapse je prakticky to samé - parsování na ty čtyři části, zjištění jestli je range od 0 do 254.. a obsahuje snad ještě mín validaci než ta funkce co posílal ten orginální týpek.
Tohle je ze synapip.pas - žádná věda, nic sofistikovaného, taky parse stringu..
svata matka kto to programoval, to je zalezitost na 3riadky v C.
Vrati to teda TRUE alebo FALSE pre tu IP 999.999.999.999 ?
To přes synapse, jak piše pme funguje spolehlivě, děkují
Napis prosím ty 3 radky...
Já jsem nad tím také přemýšlel
(Ale pravda je, že pokud tam nejsou nějaké if/logické závislosti, jako že když je první 255 že na konci nesmí být nula apod, tak bych byl schopen to napsat v Oracle regulerníma výrazama+split by expression+pokusem o konverzi+connect by - v céčku by se to také možná dalo nějak opsat ale také bych byl rád, kdyby to převedl tam by to podle mne muselo být delší)
Zkus napsat regularni vyraz, ktery zkontroluje, zda retezec obsahuje cislo od 0 do 255
Ale maso ma pravdu - takhle nahardcodovane to vezme (alespon ja nevidim chybu)
já jsem tam psal snad nějakou kombinaci s jinými příkazy/funkcemi