代码之家  ›  专栏  ›  技术社区  ›  faressoft

使用regexp[duplicate]验证Url

  •  -1
  • faressoft  · 技术社区  · 14 年前

    可能的重复:
    PHP validation/regex for URL
    PHP regex for validating a URL

    我在用

    (((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,}))
    

    在我的脚本中验证URL。

    但我朋友告诉我这个网址有问题:

    http://www.example.com/example(200)aaaa.rar
    

    我该怎么加” ( “和” ) “我的regexp声明?

    我应该在regexp中添加其他字符吗?

    3 回复  |  直到 7 年前
        1
  •  0
  •   Daniel Vandersluis    14 年前

    我可以推荐这个网站吗 http://regexlib.com/ 单击顶部的Browse并选择Uri按钮。

    为了回答你的问题, (((?:http|https):\/\/[a-zA-Z0-9\/\?=#&%~-]+(.[a-zA-Z0-9\/\?=#&%~-]+)+)|(www(.[a-zA-Z0-9\/\?=_#&%~-\\)\\(]+){2,}))

    注意 \) \( 快结束了。它们必须转义(前缀为 \\ )因为这些是用于在regex中分组的字符。

        2
  •  2
  •   Daniel Vandersluis    14 年前

    PHP已经有了验证url的方法, filter_var ,这将比您的regex更有效(正如我在上面评论的,它允许误报):

    $url = "http://www.example.com/example(200)aaaa.rar";
    var_dump(filter_var($url, FILTER_VALIDATE_URL));
    
        3
  •  0
  •   Paul Ruane    14 年前

    我相信说明书会回答你的问题 RFC-2068 ,不过您需要打开您的BNF靴子的旅行。

    总之,除了少数必须转义的保留字符外,几乎所有字符都可以在域名之后使用:

    [RFC]中的BNF包括在RFC 1738所指定的有效URL中不允许的国家字符,因为HTTP服务器不被限制在允许表示地址的ReliPATH部分的未保留字符组中,并且HTTP代理可以接收由RFC 1738定义的URI请求。