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()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

正規表現でのHTTPの問題を修正するには、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 に答える