Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-41051
Unlike
2003-10-24 04:24
2003.11.13
Подробный учебник по БД. Очень надо разобраться ...


3-40792
Skalp
2003-10-22 14:37
2003.11.13
DBGrid, ширину колонок которой можно менять, а перемещать - нет!


1-41571
А...апельсин
2003-10-27 14:59
2003.11.13
ComboBox1.Items.AddObject


3-40889
Olga
2003-10-20 15:41
2003.11.13
Объединение запросов


3-40830
geg
2003-10-22 09:25
2003.11.13
IBQuery1 filds то F_1 to SUM





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский