方法一:
uses WinSock;
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2014.01.07
过程名: GetSubStrCount
功能: 获得子字符串在父字符串中出现的次数
参数: const sSubStr, sStr: WideString
返回值: Integer
说明:
-------------------------------------------------------------------------------}
function GetSubStrCount(const sSubStr, sStr: WideString): Integer;
var
I, X: Integer;
iLenSubStr, iLenStr: Integer;
begin
iLenSubStr := Length(sSubStr);
Result := 0;
I := 1;
iLenSubStr := Length(sSubStr);
iLenStr := Length(sStr) - iLenSubStr + 1;
while I <= iLenStr do
begin
if sStr[I] = sSubStr[1] then
begin
X := 1;
while (X < iLenSubStr) and (sStr[I + X] = sSubStr[X + 1]) do
Inc(X);
if (X = iLenSubStr) then
begin
Result := Result + 1;
end;
i := i + X;
end
else
Inc(I);
end;
end;
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2013.12.27
过程名: IsLegalIP
功能: 检查IP地址是否合法
参数: IP: String
返回值: Boolean
说明: True为合法,False为非法
-------------------------------------------------------------------------------}
function IsLegalIP(const sIP: string): Boolean;
begin
if (GetSubStrCount('.', sIP) = 3) and (Longword(inet_addr(PAnsiChar(AnsiString(sIP)))) <> INADDR_NONE) then
Result := True
else
Result := False;
end;
uses PerlRegEx;
{-------------------------------------------------------------------------------
作者: 曾聪
日期: 2014.01.19
过程名: IsLegalIP
功能: 检查IP地址是否合法
参数: IP: String
返回值: Boolean
说明: True为合法,False为非法,最新版本采用正则表达式匹配,正确判断001.002.003.004非法
-------------------------------------------------------------------------------}
function IsLegalIP(const sIP: string): Boolean;
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create;
try
reg.Subject := sIP;
reg.RegEx := '^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$';
Result := reg.Match;
finally
FreeAndNil(reg);
end;
end;