如何盘读ip格式正确??(33分)

  • 主题发起人 主题发起人 maginnn
  • 开始时间 开始时间
M

maginnn

Unregistered / Unconfirmed
GUEST, unregistred user!
让用户在edit中输入ip地址
如何判断输入的ip地址是否正确的(当然我可以限制只能输入数字和“.”)
关键是如何判断是正确的ip地址!![:(!][:(!]
如果错误提示,是无效ip
 
function IsLegalIP(IP:string):boolean;
begin

if Longword(inet_addr(pchar(IP)))=INADDR_NONE then
begin
result:=false;
exit;
end
else result:=true;

end;
 
to zw84611 多谢
好像缺少说明定义阿
有如下错误
[Error] Unit1.pas(30): Undeclared identifier: 'inet_addr'
[Error] Unit1.pas(30): Undeclared identifier: 'INADDR_NONE'
[Warning] Unit1.pas(30): Comparing signed and unsigned types - widened both operands
 
uses WinSock;
 
procedure TForm1.Button1Click(Sender: TObject);
function IsLegalIP(IP:string):boolean;
begin
if Longword(inet_addr(pchar(IP)))=INADDR_NONE then
begin
result:=false;
//exit;
end
else result:=true;
end;

begin

if ISlegalIP(edit1.Text) then showmessage('aaa')
else showmessage('bbb');
end;

无论正确的ip (192。168。168。1)
还是不正确的ip(22222。222。1。2222222)
都显示aaa
 
怎么会?我刚试了一下,22222.222.1.2222222显示bbb
 
sorry
哪我的怎么不可以阿???
 
把EDIT.TEXT分成四段
分别判断每一段就OK了
 
用zw84611的办法最好,IP地址其实是一个四字节的整数
 
我不明白为什么,我用D5
另一个方法:
function IsLegalIP(IP:string):boolean;
var i,j,l:integer; ips:array [1..4] of string;
begin

i:=1;
for l:=1 to 4 do ips[l]:='';
for j:=1 to length(ip) do
if ip[j]<>'.' then
begin
if (ip[j]<'0')or(ip[j]>'9') then
begin
//showmessage(ip[j]);
Result:=false;
exit;
end;
ips:=ips+ip[j]
end
else inc(i);

if (i<>4)
or((strtoint(ips[1])>255)or(strtoint(ips[1])<1))
or((strtoint(ips[2])>255)or(strtoint(ips[2])<1))
or((strtoint(ips[3])>255)or(strtoint(ips[3])<1))
or((strtoint(ips[4])>255)or(strtoint(ips[4])<1))
then Result:= false else Result:= true;

end;
 
用的二种方法可以了
肯定是的一种方法好,我的就是不可以
多谢了!!!
 
后退
顶部