0

文字列に有効な/整形式の URL が含まれていることを確認するにはどうすればよいですか?

文字列内の URL が正しい形式であることを確認する必要があります。

http://またはを含む必要があります。https://

および.comまたは.orgまたは.netまたはany other valid extension

SO で見つかった回答のいくつかを試しましたが、すべて「www.google.com」を有効なものとして受け入れています。

私の場合、有効な URL はhttp://www.google.com またはhttps://www.google.com である必要があります。

www.一部の URL では使用されていないため、この部分は必須ではありません。

4

4 に答える 4

3

Take a look at the answer here: PHP regex for url validation, filter_var is too permisive

filter_var() could be just fine for you, but if you need something more powerful, you'll have to use regex.

Additionally with the code from here, you can sub-in any regex that suits your needs:

<?php 
    $regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
    $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass 
    $regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP 
    $regex .= "(\:[0-9]{2,5})?"; // Port 
    $regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
    $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
    $regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor 
?> 

Then, the correct way to check against the regex list as follows: 

<?php 
       if(preg_match("/^$regex$/", $url)) 
       { 
               return true; 
       } 
?>
于 2012-10-14T16:18:41.397 に答える
1

YOU can do this by using php filter_var function

$valid=filter_var($url, FILTER_VALIDATE_URL)

if($valid){
//your code
}
于 2012-10-14T16:18:02.320 に答える
0

filter_var($url, FILTER_VALIDATE_URL)最初に、有効な URL を扱っていることを確認するために使用できます。

次に、URL がparse_urlで実際に有効であると仮定してテストできる条件がさらにあります。

$res = parse_url($url);
return ($res['scheme'] == 'http' || $ret['scheme'] == 'https') && $res['host'] != 'localhost');
于 2012-10-14T16:23:24.383 に答える
0

カールソリューションがあります:

function url_exists($url) {
    if (!$fp = curl_init($url)) return false;
    return true;
}

fopen ソリューションがあります (持っていない場合)

function url_exists($url) {
    $fp = @fopen('http://example.com', 'r'); // @suppresses all error messages
    if ($fp) {
        // connection was made to server at domain example.com
        fclose($fp);
        return true;
    }
    return false;
}
于 2012-10-14T16:20:56.210 に答える