Předmět Autor Datum
if (z > 255) or ((z <> 0) and (ip[st[1] + 1] = '0')) then begin IsWrongIP := True; Exit; Celý jse…
AZOR 13.05.2012 20:03
AZOR
To je len sprostá kontrola stringu, či je syntax zadanej IP správna a už vôbec ten algoritmus porovn…
pme 13.05.2012 20:23
pme
::)::)::) To je len sprostá kontrola stringu, či je syntax zadanej IP správna a už vôbec ten algori…
AZOR 14.05.2012 07:50
AZOR
svata matka kto to programoval, to je zalezitost na 3riadky v C. Vrati to teda TRUE alebo FALSE pre…
MM.. 13.05.2012 21:04
MM..
To přes synapse, jak piše pme funguje spolehlivě, děkují
Hanzlk 14.05.2012 04:28
Hanzlk
svata matka kto to programoval, to je zalezitost na 3riadky v C. Napis prosím ty 3 radky...
Jan Fiala 14.05.2012 10:04
Jan Fiala
Já jsem nad tím také přemýšlel ;-) (Ale pravda je, že pokud tam nejsou nějaké if/logické závislosti…
AZOR 14.05.2012 10:18
AZOR
Zkus napsat regularni vyraz, ktery zkontroluje, zda retezec obsahuje cislo od 0 do 255
Jan Fiala 14.05.2012 11:41
Jan Fiala
string pattern = @"\b(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]?)\…
MaSo 14.05.2012 12:14
MaSo
Ale maso ma pravdu - takhle nahardcodovane to vezme (alespon ja nevidim chybu) poslední
AZOR 14.05.2012 12:21
AZOR
já jsem tam psal snad nějakou kombinaci s jinými příkazy/funkcemi :-)
AZOR 14.05.2012 12:18
AZOR

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:

if not isIP('999.999.999.999') then ShowMessage('nie je platna');

::)::)::)

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

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.

function IsIP(const Value: string): Boolean;
var
  TempIP: string;
  function ByteIsOk(const Value: string): Boolean;
  var
    x, n: integer;
  begin
    x := StrToIntDef(Value, -1);
    Result := (x >= 0) and (x < 256);
    // X may be in correct range, but value still may not be correct value!
    // i.e. "$80"
    if Result then
      for n := 1 to length(Value) do
        if not (AnsiChar(Value[n]) in ['0'..'9']) then
        begin
          Result := False;
          Break;
        end;
  end;
begin
  TempIP := Value;
  Result := False;
  if not ByteIsOk(Fetch(TempIP, '.')) then
    Exit;
  if not ByteIsOk(Fetch(TempIP, '.')) then
    Exit;
  if not ByteIsOk(Fetch(TempIP, '.')) then
    Exit;
  if ByteIsOk(TempIP) then
    Result := True;
end;

Tohle je ze synapip.pas - žádná věda, nic sofistikovaného, taky parse stringu..

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ší)

Zpět do poradny Odpovědět na původní otázku Nahoru