2012-10-14 44 views
1

如何确保一个字符串包含有效的/格式正确的url?如何确保一个字符串包含有效的/格式正确的url?

我需要确保字符串中的网址格式正确。

它必须包含http://https://

.com.org.netany other valid extension

我尝试了一些在这里发现了这样的答案,但所有正在接受“www.google.com”为有效。

在我的情况下,有效的网址需要是http:// www.google.com或https:// www.google.com。

www.部分不是一个义务,因为有些网址不使用它。

+0

FILTER_VALIDATE_URL不是acceptible因为“本地主机”是一个有效的URL,但不能是我的系统上。 –

回答

2

看看答案在这里做到这一点: PHP regex for url validation, filter_var is too permisive

filter_var()可能只是对你罚款,但如果你需要更强大的东西,你将不得不使用正则表达式。

另外的代码从here,可以分在适合您需要的任何正则表达式:

<?php 
    $regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
    $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?"; // 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; 
     } 
?> 
+0

是的,但我没有足够的知识来使正则表达式来处理我的需求。 –

+0

但它是正确的答案在链接:) – vladko

+0

yesh但在链接中的这个表达式http部分是可选的,我需要那部分。 –

1

您可以通过使用PHP filter_var功能

$valid=filter_var($url, FILTER_VALIDATE_URL) 

if($valid){ 
//your code 
} 
1

有一个卷曲的解决方案:

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; 
} 
0

filter_var($url, FILTER_VALIDATE_URL)可以先用来做sur你正在处理一个有效的URL。

那么你有更多的条件,可以通过假设URL测试确实是有效的与parse_url

$res = parse_url($url); 
return ($res['scheme'] == 'http' || $ret['scheme'] == 'https') && $res['host'] != 'localhost'); 
+0

你能解释我如何使用它吗? –

+0

@LucasMatos我相信我的例子很清楚。有什么你不明白的吗? – SirDarius

相关问题