4

我正在尝试验证 URL。这是我的代码:

function isValidURL($url) 
{
    return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

此代码正在运行,但现在我正在尝试确定如何添加http://https://URL 是否正确但只是缺少开头http://

请指出我正确的方向。

4

5 回答 5

6

使用过滤器功能,有一个FILTER_VALIDATE_URL

$is_valid_url = filter_var($url, FILTER_VALIDATE_URL);

还有很多选项,请参见此处

要检测是否丢失http://,只需测试您的输入而不先修改它,然后尝试添加它,如果失败则再次测试。

于 2013-03-16T19:29:20.850 回答
3

您可以使用parse_url()验证您的网址 http://php.net/manual/en/function.parse-url.php

<?php

$url = "https://twitter.com?id=3232";
$url_info = parse_url($url);

echo "<pre>";
    print_r($url_info);
echo "</pre>";


?>

输出

Array
(
    [scheme] => https
    [host] => twitter.com
    [query] => id=3232
)

我相信你甚至可以使用这个函数parse_url,你会很容易地得到很多参数并且格式可以理解。

所以你的代码将是

<?php

function isValidURL($url) {
    $varr = parse_url($url);
    if ($varr['scheme'] == 'https') {
        return true;
    }
    return false;
}
?>

注意:上面使用的 URL 无效,用于测试目的

于 2013-03-16T19:48:50.113 回答
1

您可以这样使用strpos

if (strpos($url,'http://') === false){
    $url = 'http://'.$url;
}
于 2013-03-16T19:31:40.297 回答
1

要修复 Regex 的 HTTP(s) 问题,您可以http(s)?://在括号之间设置并使其可选?

var_dump(isValidURL("stackoverflow.com/questions/15453684/php-url-verification-and-if-not-valid-fix-it"));

function isValidURL($url) {
 return preg_match('|^(http(s)?://)?[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

编辑: 感谢 DCSoft,似乎上面的正则表达式也验证了类似的东西fijsfsdufd,这是一个快速修复,通过添加一个点:

function isValidURL($url) {
 return preg_match('|^(http(s)?://)?[a-z0-9-]+\.(.[a-z0-9-]+)+(:[0-9]+)?(/.*)?$|i', $url);
}

这可能很有趣。

于 2013-03-16T19:34:08.193 回答
1

基于@seanwm,这是一个检查和修复 URL的函数。

PHP 函数

function fixUrl($url, $forceSSL = false) {

    if (strpos($url,'http://') === false 
    && strpos($url,'https://') === false) {

        if($forceSSL) {
            return 'https://'.$url;
        }

        return 'http://'.$url;
    }

    return $url;
}

采用

对于http://

$url = fixUrl($url);

强制添加https://

$url = fixUrl($url, true);
于 2018-12-11T07:52:50.013 回答