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

Я создаю простое приложение, и для одной части я хотел бы взять пользовательский ввод из 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)

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


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


Ответы (1)


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

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

person Mike Driscoll    schedule 28.11.2012