0

私は単純なアプリケーションを作成しています。その一部として、ユーザーの入力を 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)

完璧ではありませんが、私の場合はうまくいきました。ありがとう!

4

1 に答える 1

0

それはうまくいくはずですが、正規表現ルートに行きたい場合は、次の回答を参照してください: Python で正規表現を使用して URL を検証するにはどうすればよいですか?

その情報を MaskedEditControl と組み合わせることができると思います。wxPython デモには多くの例があります。

于 2012-11-28T14:27:11.897 に答える