私は単純なアプリケーションを作成しています。その一部として、ユーザーの入力を TextCtrl から取得し、それが有効な URL であるかどうかを確認したいと考えています。GUI なしでこのプログラムを作成し、次のコードを使用しました: (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()
ボタンをクリックしてこのコードを実行すると、プログラムがフリーズしてクラッシュします。これは、GUI のメイン ループを中断しているためだと思います。if ステートメントを使用して URL を検証して検証できると思いますが、もっと効率的なものを探しています...おそらく正規表現 (正規表現を学んだことはありませんが)。
どんな助けでも大歓迎です。
編集:この問題は解決されました。私は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)
完璧ではありませんが、私の場合はうまくいきました。ありがとう!