Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2015, 14:16   #1
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Сообщений: 29
По умолчанию Проверка на валидность URL [кроссплатформенно]

Всем привет. Нужно проверить введённый пользователем URL на валидность. Приложение у меня кроссплатформенное, поэтому воспользоваться функциями IsValidURL и PathIsURL я не могу.

Мне нужно:
1) либо аналогичная функция из другой (кроссплатформенной) части RTL, если она есть
2) либо регулярное выражение для проверки валидности URL.

Попробовав второй путь, я столкунлся с проблемой. Из RegexBuddy я почерпнул две (почти одинаковые по результату (?)) регулярки, ищущие URL:
Код:
URL_RegEx = '\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]';
Код:
URL_RegEx = '\b(?<protocol>https?|ftp)://(?<domain>[-A-Z0-9.]+)(?<file>/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(?<parameters>\?[A-Z0-9+&@#/%=~_|!:,.;]*)?';
Ни одна из них не заработала в Delphi XE7u1 (скоро попробую XE8, но думаю, не из-за этого). Хотя RegexBuddy в режиме Delphi XE6 всё прекрасно ищет. В чём проблема и как мне переписать эти регулярки, чтоб они работали в Delphi?
Если что, использую встроенный TRegEx.
bro вне форума Ответить с цитированием
Старый 04.04.2015, 15:14   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

а смысл проверять ?

тем более ни один из этих патернов не проверит все что можно
lomastr_ вне форума Ответить с цитированием
Старый 04.04.2015, 15:22   #3
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
а смысл проверять ?

тем более ни один из этих патернов не проверит все что можно
Смысл в том, что если введённый текст не является URL - моя программа не будет пытаться оттуда ничего скачать. В общем-то, нужен даже не паттерн для URL, а конкретно HTTP/HTTPS.

Почему не проверит? Вроде они достаточно чётко отсекают неправильные URL.

Пока сделал так:
Код:
  URL_RegEx = '^http(s)?:\/\/.{3,}$';
В общем-то фиг с ним, просто хотелось в соответствии с RFC проверять.
bro вне форума Ответить с цитированием
Старый 04.04.2015, 15:26   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

ну пусть отсекут http://википедия.орг.рф/

вы когда нибудь видели валидный патерн для проверки email? там кода на 2 страницы мелким почерком, потому правильнее всего проверять есть сабака гдето в середине или нет, остальное нафик не надо

а урл менее строг поэтому там наверное будет "война и мир" ...
проверяете есть в начале http, даже на s можно забить, этого хватит
тем более проверка на валидность не дает по сути ничего, проверить правильный он или нет только в бою
lomastr_ вне форума Ответить с цитированием
Старый 04.04.2015, 15:32   #5
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Смысл в том, что если введённый текст не является URL - моя программа не будет пытаться оттуда ничего скачать.
могу придумать 100500 валидных но не рабочих урлов, ваша программа умрет
lomastr_ вне форума Ответить с цитированием
Старый 04.04.2015, 18:44   #6
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Сообщений: 29
По умолчанию

В общем, оставил последний вариант https://github.com/magicxor/URL2Titl...ster/uMain.pas
Спасибо за помощь
bro вне форума Ответить с цитированием
Старый 04.04.2015, 19:10   #7
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
могу придумать 100500 валидных но не рабочих урлов, ваша программа умрет
Поддерживаю. lomastr_ +10
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 04.04.2015, 19:13   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а что вы потом с урлом делаете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2015, 19:25   #9
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а что вы потом с урлом делаете?
Ничего криминального.
Получаю список заголовков страниц по списку урлов. https://github.com/magicxor/URL2Title - сабж
bro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка e-mail на валидность firerap Работа с сетью в Delphi 1 12.12.2012 15:20
Проверка валидности URL atihiy2010 Работа с сетью в Delphi 7 22.10.2012 15:12
Проверка документов word на валидность mishax Общие вопросы Delphi 1 19.09.2012 12:47
Проверка URL на работоспособность Beni PHP 2 13.08.2009 21:44
Проверка формы на валидность RegExps Jensi PHP 5 14.03.2009 14:00