Die untenstehende Routiene arbeitet derzeit am schnellsten.
Stringoperationen sind niemals schnnell, vorallem, wenn dabei Strings reseviert, umkopiert und freigegeben werden.
PS: mit mehr als 4 Punkten im String erzeugt deine Funktion einen Pufferüberlauf bei
ix[j] := i; .
Delphi-Quellcode:
function isIP(const s: String): Boolean;
var P: PChar;
c, L, n: Integer;
begin
Result := False;
P := PChar(s);
n := 0;
while P^ <> #0 do
begin
Inc(n);
c := 0;
L := 0;
while P^ in ['0'..'9'] do
begin
c := c * 10 + (Ord(P^) - Ord('0'));
Inc(L);
Inc(P);
end;
if (L = 0) or (L > 3) or (c > 255) then Exit;
if n = 4 then Break;
if P^ <> '.' then Exit;
Inc(P);
end;
Result := (n = 4) and (P^ = #0);
end;