Samozřejmě že dá odpověd na to jestli je IP platná.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
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..