用于检查 URL 是否为短 URL 的正则表达式 / php 代码

Aks*_*aje 3 php regex url-shortener

我正在尝试创建一个 php 函数,它将检查传递的 URL 是否是一个短 URL。像这样的东西:

/**
 * Check if a URL is a short URL
 *
 * @param string $url
 * return bool
 */
function _is_short_url($url){
    // Code goes here
}
Run Code Online (Sandbox Code Playgroud)

我知道更简单且可靠的方法是检查 301 重定向,但此功能旨在保存仅用于检查的外部请求。该函数也不应该检查 URL 短列表,因为这将是一种可扩展性较差的方法。

所以我在想一些可能的检查:

  1. URL 总长度 - 最多 30 个字符
  2. 最后一个“/”之后的 URL 长度 - 最多 10 个字符
  3. 协议 (http://) 后的“/”数量 - 最多 2
  4. 主机最大长度

关于可能的方法或更详尽的清单有什么想法吗?

编辑:此功能只是尝试保存外部请求,因此可以为非短网址(但真正的短网址)返回 true。通过此功能后,我无论如何都会通过检查 301 重定向来扩展所有短 URL。这只是为了消除明显的。

Mir*_*toš 5

我不建议使用正则表达式,因为它太复杂且难以理解。这是用于检查所有约束的 PHP 代码:

function _is_short_url($url){
        // 1. Overall URL length - May be a max of 30 charecters
        if (strlen($url) > 30) return false;

        $parts = parse_url($url);

        // No query string & no fragment
        if ($parts["query"] || $parts["fragment"]) return false;

        $path = $parts["path"];
        $pathParts = explode("/", $path);

        // 3. Number of '/' after protocol (http://) - Max 2
        if (count($pathParts) > 2) return false;

        // 2. URL length after last '/' - May be a max of 10 characters
        $lastPath = array_pop($pathParts);
        if (strlen($lastPath) > 10) return false;

        // 4. Max length of host
        if (strlen($parts["host"]) > 10) return false;

        return true;
}
Run Code Online (Sandbox Code Playgroud)