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