验证TextCtrl-Python/wxPython中的URL

验证TextCtrl-Python/wxPython中的URL,python,validation,wxpython,urllib,textctrl,Python,Validation,Wxpython,Urllib,Textctrl,我正在创建一个简单的应用程序,其中一部分我想从TextCtrl中获取用户的输入,并检查它是否是有效的URL。我在没有GUI的情况下制作了这个程序,并使用了以下代码: (我已将其更改为使用wxPython错误对话框,但在我刚刚打印出错误语句之前) 当我点击按钮运行这段代码时,程序冻结并崩溃。我认为这是因为它中断了GUI的主循环。我想我可以尝试通过if语句验证URL,但我正在寻找更有效的方法…可能是regex(尽管我从未学习过regex) 任何帮助都将不胜感激 编辑:这个问题已经解决了。我最终使用了

我正在创建一个简单的应用程序,其中一部分我想从TextCtrl中获取用户的输入,并检查它是否是有效的URL。我在没有GUI的情况下制作了这个程序,并使用了以下代码: (我已将其更改为使用wxPython错误对话框,但在我刚刚打印出错误语句之前)

当我点击按钮运行这段代码时,程序冻结并崩溃。我认为这是因为它中断了GUI的主循环。我想我可以尝试通过if语句验证URL,但我正在寻找更有效的方法…可能是regex(尽管我从未学习过regex)

任何帮助都将不胜感激

编辑:这个问题已经解决了。我最终使用了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)

虽然它不是完美的,但它对我的案例有效。谢谢

这应该行得通,但如果您想使用正则表达式,请参见以下答案:


我想你可以把这些信息和一个蒙面控件结合起来。wxPython演示有很多例子。

对我来说似乎很好。。。返回负值需要一段时间,但只要它引发错误,我就会看到对话框。。。(我试过:)@JoranBeasley它在没有GUI的情况下运行良好,但是当我将它与wxPython一起使用时,它会冻结并使程序崩溃。然后,您应该发布一个完整的示例,以尽可能少的行数演示您的问题
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)