Главная страница
    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.48 MB
Время: 0.032 c
4-42238
Dmitry V. Averuanov
2003-09-17 11:12
2003.11.13
Как запустить свою программу как сервис NT


1-41257
Micah'GF
2003-11-04 16:13
2003.11.13
Передача класса в качестве параметра другой процедуре


3-40925
kosm
2003-10-16 17:45
2003.11.13
BOLD for Delphi - миф или реальность?


1-41532
Adoon
2003-10-28 10:58
2003.11.13
Библиотеки архивирования


1-41388
denis24
2003-10-29 17:10
2003.11.13
проверка значения в ячейке StringGrida





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский