Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проверка URL-адреса в TextCtrl - Python/wxPython

Автор вопроса: Rev22Ответов: 1

Я создаю простое приложение, и для одной части я хотел бы взять пользовательский ввод из TextCtrl и проверить, является ли он допустимым URL-адресом. Я сделал эту программу без графического интерфейса и использовал следующий код: (я изменил его, чтобы использовать диалоги ошибок wxPython, но до этого я просто распечатал сообщение об ошибке)

try:
    if url[:7] != 'http://':
        urllib.urlopen('http://' + url)
    else:
        urllib.urlopen(url)
except IOError:
    error = wx.MessageDialog(None, 'Please enter a valid URL!', 'URL Error', wx.OK | wx.ICON_ERROR)
    error.ShowModal()

Когда я запускаю этот код по нажатию кнопки, программа зависает и вылетает. Я предполагаю, что это связано с тем, что он прерывает основной цикл графического интерфейса. Думаю, я мог бы попытаться проверить URL-адрес с помощью операторов if, но я ищу что-то более эффективное... возможно, регулярное выражение (хотя я никогда не изучал регулярное выражение).

Любая помощь будет принята с благодарностью.

Изменить: эта проблема была решена. В итоге я использовал регулярное выражение, используемое Django:

def is_valid_url(url):
    import re
    regex = re.compile(
        r'^https?://'  # http:// or https://
        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|'  # domain...
        r'localhost|'  # localhost...
        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
        r'(?::\d+)?'  # optional port
        r'(?:/?|[/?]\S+)$', re.IGNORECASE)
    return url is not None and regex.search(url)

Хотя это не идеально, это сработало для моего случая. Спасибо!

  • кажется, работает нормально для меня ... требуется некоторое время, чтобы получить отрицательный результат, но пока он вызывает ошибку, я вижу диалоговое окно ... (я пробовал: blaaalaala.com) Joran Beasley 28.11.2012
  • @JoranBeasley Он отлично работает без графического интерфейса, но когда я использую его с wxPython, он зависает и вызывает сбой программы. Rev22 28.11.2012
  • тогда вы должны опубликовать полный пример, демонстрирующий вашу проблему в минимальном количестве строк, которые вы можете Joran Beasley 28.11.2012

pythonvalidationurllibwxpythontextctrl

Ответы

Ответ 1 · Mike Driscoll

Это должно работать, но если вы хотите пойти по маршруту регулярного выражения, см. следующий ответ: Как проверить URL с помощью регулярного выражения в Python?

Я думаю, вы могли бы объединить эту информацию с MaskedEditControl. Демонстрация wxPython содержит множество примеров.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы