Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Как проверить введен 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
14-41874
Думкин
2003-10-24 04:51
2003.11.13
С днем рождения! 24 октября.


6-41821
SDF
2003-09-15 06:53
2003.11.13
Работа с сокетами


4-42293
frost
2003-08-22 08:58
2003.11.13
Добавление пункта в контекстное меню Windows


1-41434
Gilk
2003-11-04 16:23
2003.11.13
Открытие типизированных файлов


1-41562
Дуся
2003-10-24 18:46
2003.11.13
Помогите! Валится при закрытии приложения.