【问题标题】:Basic web-address validation regex?基本的网址验证正则表达式?
【发布时间】:2011-01-07 14:46:27
【问题描述】:

我正在寻找一个验证简单网站地址的正则表达式,即

我需要它的联系方式,“网站”字段,然后当用户点击它打开 IE,不必严格,我只是不希望用户输入'我喜欢牛奶”或“谷歌”等。

我想改写我自己努力寻找异常的想法,我为什么不从社区经验中学习,任何有好的正则表达式或链接的人请发帖。

非常感谢。

【问题讨论】:

    标签: .net regex validation


    【解决方案1】:

    验证或检测 URL 并不像看起来那么简单。这是一篇深入探讨该主题的博文:

    http://www.blog.activa.be/2008/10/30/ExtractingURLsNotPerfectButQuotgoodEnoughquot.aspx

    还有:

    https://blog.codinghorror.com/the-problem-with-urls/

    【讨论】:

    • 好页。每个人都在不断尝试重塑 RFC。有缺陷吗?
    【解决方案2】:

    一个选项不使用正则表达式,但address 必须以http:// 之类的协议开头:

    static bool validateAddress(string address)
    {
        Uri valid = null;
        return 
            address.StartsWith("http") &&
            Uri.TryCreate(address, UriKind.Absolute, out valid);
    }
    

    【讨论】:

      【解决方案3】:

      我还提到了 RFC 3986,但它有点过于笼统,因为它也用于匹配相对 URL。显然,在 OP 案例中,我们需要绝对的公共 URL。

      ^(https?://)?(?:[\w.]+)\.(?:[\w:.]+) 之类的东西似乎更真实。我故意排除需要用户名/密码对的网站,但接受端口号。
      当 Unicode URL 变得司空见惯时,这种表达方式就会被打破……

      [编辑] 我接受了任何方案,我应该限制更多,我想,对于暴露的情况,不需要接受 ftp 地址或 bzr+ssl:// ......

      【讨论】:

        【解决方案4】:
        https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?
        

        摘自http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/


         (https?://)?([-\w\.]+)+(:\d+)?
        

        根据建议进行修改,但我认为人们应该更好地遵循线索并自己找出答案。无论如何,即使是复制/粘贴,人们也应该知道他们在做什么。

        【讨论】:

        • 这不满足 OP 的要求。他不想强制使用“http”前缀。但是删除它的 https?:// 部分,它应该。
        【解决方案5】:

        来自RFC 3986, Uniform Resource Identifiers (URI): Generic Syntax,附录 B(第 50 页):

        ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
        

        如果 URI 与此正则表达式匹配,则它的格式正确。比赛组为您提供各种作品,它们是:

        scheme    = $2
        authority = $4
        path      = $5
        query     = $7
        fragment  = $9
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-06
          • 1970-01-01
          • 1970-01-01
          • 2012-04-17
          • 2012-07-12
          • 1970-01-01
          • 1970-01-01
          • 2011-07-14
          相关资源
          最近更新 更多