Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизКак проверить введен IP адресс или URl в едите? Найти похожие ветки
← →
Dunmer (2003-10-27 12:47) [0]Собственно сабж.
← →
Anatoly Podgoretsky (2003-10-27 12:57) [1]Попробуй парсинг сделать по маске 255.255.255.255 хотя это не единственный формат для ИП
← →
Narayan (2003-10-27 13:05) [2]function mIsIPAddr(const IpAddr: String): Boolean;
const cIpSet="1234567890.";
var i: Integer;
begin
Result:=False;
For i:=1 To Length(IpAddr) Do
Begin
Result:=(Pos(IpAddr[i],cIpSet)>0);
If not(Result) Then Exit;
end;
end;
=)
← →
Reindeer Moss Eater (2003-10-27 13:09) [3]Если в эдите есть хоть одна одиночная "/" то это URL
Хотя с другой стороны "www.delphimaster.ru" можно рассматривать и как способ указать IP и как URL
← →
Anatoly Podgoretsky (2003-10-27 13:45) [4]Не совсем xxx.xxx.xxx.xxx тоже будет являться UDR если будет использоваться для получения ресурса и как справедливо замечено www.delphimaster.ru тоже не обязательно URL если будет использоваться как псевдоним ИП
← →
panov (2003-10-27 13:49) [5]пробовать преобразовать и подключаться.
← →
panov (2003-10-27 13:52) [6]или так(из рабочего кода, PSock - Record, не надо обращать внимание):
sHost := Host;
New(pSock);
pSock^.WSA.sin_family := AF_INET;
pSock^.WSA.sin_port := htons(Port);
pSock^.WSA.sin_Addr.S_Addr := inet_addr(PChar(sHost));
if pSock^.WSA.sin_Addr.S_Addr=INADDR_NONE then
begin
he := GetHostByName(PChar(sHost));
if he=nil then
begin
Dispose(pSock);
ErrorCode := -2;
Exit;
end;
pSock^.WSA.sin_Addr.S_un_b.s_b1 := Ord(he.h_addr^[0]);
pSock^.WSA.sin_Addr.S_un_b.s_b2 := Ord(he.h_addr^[1]);
pSock^.WSA.sin_Addr.S_un_b.s_b3 := Ord(he.h_addr^[2]);
pSock^.WSA.sin_Addr.S_un_b.s_b4 := Ord(he.h_addr^[3]);
end;
← →
Кабан (2003-10-27 13:59) [7]Narayan © (27.10.03 13:05) [2]
О господи! Ну и код люди пишут!
← →
Игорь Шевченко (2003-10-27 14:34) [8]Narayan © (27.10.03 13:05)
Двоеточие забыл, которым номер порта отделяется
← →
Dunmer (2003-10-27 14:57) [9]Narayan - Спасибо. Мне твоя реализация очень понравилась.
panov - Это не разумно:)
Мой парсер на грани завершения:)
← →
panov (2003-10-27 16:30) [10]Жуть одним словом.
← →
Lmz (2003-10-27 20:07) [11]Да есть какая-то WinApi функция, которая проверяет, является ли строка IP адресом
← →
panov (2003-10-27 20:57) [12]см. inet_addr
Уже был приведен пример.
← →
Ломброзо (2003-10-27 21:00) [13]На URL -
InternetCrackUrl
← →
Юрий Федоров (2003-10-27 21:01) [14]А стандартный MatchesMask не пойдет ?
← →
Soft (2003-10-27 23:02) [15]Если D6/D7, то в компонентах INDY есть компонента для пинга. Пингануть его перед занесением в базу.
Сам сейчас пишу парсер, но текста(спец-форматирование txt).
← →
Narayan (2003-10-28 13:20) [16]2 Кабан [7] & 2 Игорь Шевченко [8]
Нечего глушить тараканов атомными бомбами.
И кстати, а где ваши-то предложения, стесняюсь спросить.
← →
Кабан (2003-10-28 14:20) [17]а хотьбы и так:
function mIsIPAddr(const IpAddr: String): Boolean;
const cIpSet="1234567890.";
var i: Integer;
begin
Result:=False;
For i:=1 To Length(IpAddr) Do
if Pos(IpAddr[i],cIpSet) = 0 then Exit;
Result := True;
end;
правда "1.1.1.1.1.1.1.111111...222....33444" все равно останется IP-адресом
← →
Narayan (2003-10-28 15:03) [18]2 Кабан
Оригинальное решение задачи.
Вы это сами придумали, господин Кабан ?
← →
Кабан (2003-10-28 15:30) [19]а как вы догадались :) но ведь вы не будите отрицать, что код стал проще, хотя бы для восприятия
← →
Narayan (2003-10-28 16:18) [20]2 Кабан
Пожалуй соглашусь с Вами, однако хотелось бы заметить:
мы не ищем лёгких путей !
← →
Style (2003-10-28 17:03) [21]А если вот так ??
Или не пойдет?
function IsIP(IP: string): boolean;
var
DotCount, i: integer;
Number: string;
UsePort: boolean;
const
MAXPORT = 8080;
begin
DotCount := 0;
UsePort := false;
result := false;
Number := "";
for i := 1 to Length(IP) do
begin
case IP[i] of
".":
begin
Number := "";
Inc(DotCount);
end;
"0".."9":
begin
Number := Number + IP[i];
if(not UsePort) then
begin
if(StrToInt(Number) < 0) or
(StrToInt(Number) > 255) then
begin
DotCount := 0;
break;
end;
end else
if(StrToInt(Number) < 0) or
(StrToInt(Number) > MAXPORT) then
begin
DotCount := 0;
break;
end;
end;
":":
begin
Number := "";
if(DotCount = 3) then UsePort := true;
end;
else
DotCount := 0;
break;
end; //of case
end; //for i
if(DotCount = 3) then result := true;
end;
← →
Reindeer Moss Eater (2003-10-28 17:28) [22]А что вы все спорите и причем безотносительно того, для кого введен пользователем URL или IP?
Он, пользователь, может вообще ввести 32 bit unsigned в десятичном виде или HEX и будет это IP. И многие программы этот ввод поймут.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.066 c