文字列がIPアドレスの形式になっているかどうか
26 CheckTextIPAddress 動作確認 Delphi2007 更新日 2008/01/15(火)

文字列がIPアドレスとして正しい形になっているかどうかを
判断する関数を作りました。

テストコードがあるので仕様がわかります。
────────────────────
function isSafeIP(IP:String):Boolean;
var
  i, Val: Integer;
begin
  Result := False;
  with TStringList.Create do try
  Delimiter := '.';
  DelimitedText := IP;
  if Count <> 4 then Exit;
  for i := 0 to 3 do
  begin
    if Strings[i] = '' then Exit;
    if not TryStrToInt(Strings[i], Val) then Exit;
    if not (Val in [0..255]) then Exit;
    if not (Strings[i]=IntToStr(Val)) then Exit;
  end;
  Result := True;
  finally Free; end;
end;

procedure Check(A, B: Boolean);
begin
  if not(A = B) then
  begin
    Assert(False,
      'エラーです:A=' + BoolToStr(A) + ':B=' + BoolToStr(B));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Check(True, isSafeIP('0.0.0.0'));
  Check(True, isSafeIP('1.2.3.4'));
  Check(True, isSafeIP('255.255.255.0'));
  Check(True, isSafeIP('255.255.0.0'));
  Check(True, isSafeIP('0.0.0.255'));
  Check(True, isSafeIP('192.168.0.1'));

  Check(False, isSafeIP('192.168.0.-1'));

  //数字の桁が3桁より多い
  Check(False, isSafeIP('0192.168.0.1'));
  Check(False, isSafeIP('192.00.2.1'));
  Check(False, isSafeIP('192.168.0000.1'));
  Check(False, isSafeIP('192.168.0.0001'));
  Check(False, isSafeIP('0001.0012.0123.000255'));

  //桁が余分※仕様によって変更あり
  Check(False, isSafeIP('192.168.0.01'));
  Check(False, isSafeIP('192.02.03.04'));
  Check(False, isSafeIP('0192.02.03.04'));
  Check(False, isSafeIP('01.02.03.04'));

  // 数字の数が4個より多い
  Check(False, isSafeIP('12.34.56.78.90'));
  Check(False, isSafeIP('12.34.56.78.90.123'));

  // 末尾に余計なドット
  Check(False, isSafeIP('124.83.147.202.'));
  Check(False, isSafeIP('124.83.147.202..'));
  Check(False, isSafeIP('124.83.147.202...'));

  //先頭に余計なドット
  Check(False, isSafeIP('.124.83.147.202'));

  //数値がない部分がある
  Check(False, isSafeIP('.0.0.1'));
  Check(False, isSafeIP('0.0..1'));
  Check(False, isSafeIP('0.0.1.'));

  //数値が範囲外
  Check(False, isSafeIP('256.255.255.0'));
  Check(False, isSafeIP('255.255.0.256'));

  //数値じゃない値が入っている
  Check(False, isSafeIP('0.0F.0.255'));
  Check(False, isSafeIP('0.0x0F.0.255'));
  Check(False, isSafeIP('0.$0F.0.255'));
end;
────────────────────
数値文字列が自然かどうかを判断するには
  if s = IntToStr(StrToInt(s)) then
を判断するとよいでしょう。

つまり数値にしたい文字列が、
先頭に0がついていたり、$FFだったりするのは自然っぽくないので
適切ではない、としてはじく事ができます。


参考────────────────────
ipアドレスが正しいかどうかを判定するには?
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200801/08010007.txt