【问题标题】:Validate Url using regexp [duplicate]使用正则表达式验证 URL [重复]
【发布时间】:2011-05-11 14:17:54
【问题描述】:

可能的重复:
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

如何在我的正则表达式语句中添加“(”和“)”?

我应该在我的正则表达式中输入其他字符吗?

【问题讨论】:

  • 你使用的是什么正则表达式引擎?
  • 根据您的正则表达式,www.foo.#%~ 是一个有效的 URL。无论您使用哪种语言,都可能已经有一个效果更好的 URL 验证器。
  • @Paul : 它不起作用regexr.com?2simr
  • 什么不起作用?我没有提出任何建议,只是指出了可能的重复?

标签: php regex url


【解决方案1】:

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

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

注意最后的\)\(。它们必须被转义(以\\ 为前缀),因为它们是用于在正则表达式中进行分组的字符。

【讨论】:

  • 不过,这并没有考虑到所有那些(不幸的是)现在有效的具有非 ASCII 字符的国际化域。
  • 我不是 100% 熟悉这个网站的格式。因此,其中缺少一些字符,这就是为什么我假设您指向一个可以毫发无损地给出答案的来源。 @GCATNM:非常正确,但我不认为(尽管我可能错了)他们希望那个包罗万象。
  • 语法错误:未终止的括号
【解决方案2】:

我相信规范会回答您的问题RFC-2068,尽管您需要解开您的 BNF 靴子的包装。

总之,域名后面几乎可以使用任何字符,除了少数必须转义的保留字符:

BNF [在 RFC 中] 包括 RFC 1738 规定的有效 URL 中不允许的国家字符,因为 HTTP 服务器不受限制在允许表示地址的 rel_path 部分的未保留字符集中,并且 HTTP 代理可能会接收对 RFC 1738 未定义的 URI 的请求

【讨论】:

    【解决方案3】:

    PHP 已经有一种方法来验证 URL,filter_var,它比您的正则表达式(正如我上面评论的那样,允许误报)更好地工作:

    $url = "http://www.example.com/example(200)aaaa.rar";
    var_dump(filter_var($url, FILTER_VALIDATE_URL));
    

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2011-09-21
      • 2011-03-07
      • 2021-02-24
      相关资源
      最近更新 更多