【问题标题】:PHP Url Validation Error: http://https://example.com (aka https://https://example.com)PHP URL 验证错误:http://https://example.com(又名 https://https://example.com)
【发布时间】:2011-11-23 07:19:17
【问题描述】:

我有这个 url 正则表达式模式:

$pattern = "@\b(https?://[^\s()<>\[\]\{\}]{1,".$max_length_allowed_for_each_url."}(?:\([\w\d]+\)|([^[:punct:]\s]|/)))@";

它似乎可以很好地验证我扔给它的任何 URL,直到我意识到 https://http://google.com(显然甚至 stackoverflow 都在考虑一个有效的 URL(它使该 URL 可点击,而不是我,尽管它确实删除了一个冒号)所以也许我不走运?)是一个有效的 URL,但它肯定不是。

我做了一些研究...并了解到我 should be using filter_var instead of a regex for PHP URL validation 无论如何...并且很失望地意识到它也容易受到同样的验证问题的影响。

我可以轻松征服它:

str_replace(array("https://http://","http://https://"), array("http://","https://"), $url);

但是……这似乎太不对了。

【问题讨论】:

    标签: php regex validation url


    【解决方案1】:

    嗯,它是一个有效的 URI。从技术上讲。如果您不相信我,请查看 URI 的 RFC。

    • URI 的路径部分可以包含//
    • http 是有效的主机名。
    • 即使存在:,也允许缺少端口(指定为*digit,而不是1*digit)。 (这就是 Stack Overflow 删除冒号的原因——它认为您使用的是默认端口,因此将其从 URI 中删除。)

    我建议为此编写一个特殊情况。在单独的步骤中,检查 URI 是否以 https?://https?:// 开头,然后修复它。

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2019-10-18
      • 2014-03-04
      • 1970-01-01
      • 2019-04-23
      相关资源
      最近更新 更多