2013-06-21 117 views
-4

我已經在一個項目上工作,在這個項目中,我需要檢查用戶輸入是否是有效的URL。驗證URL PHP

我已經爲一個URL上使用的所有可能的字符做了preg_match。但是,如果HTTP:///HTTPS://不在URL前面,我試圖讓它顯示一個錯誤。

這是我所做的。

if(preg_match('/[^0-9a-zA-Z.\-\/:?&=#%_]/', $url) || substr($url, 0, 7) != "http://" || substr($url, 0, 8) != "https://") { 

但這不起作用。它不斷給我一個確定的信息。我不確定我在這裏做錯了什麼,我希望我能得到一些幫助!

if語句將返回true或false。所以

if(preg_match('/[^0-9a-zA-Z.\-\/:?&=#%_]/', $url) || substr($url, 0, 7) != "http://" || substr($url, 0, 8) != "https://") { 
echo "true"; 
} else { 
echo "false"; 
} 

我只需要檢查,如果url已輸入一個有效的網址。我不需要驗證它。只需要檢查它是否具有HTTP://或HTTPS://並且包含有效的URL字符。

+0

這是否被評估爲真或假?您沒有明確說明if是否顯示OK消息或錯誤消息。 – BlargleMonster

+0

[PHP驗證/正則表達式的URL]的可能重複(http://stackoverflow.com/questions/206059/php-validation-regex-for-url) –

+3

請不要破壞你自己的帖子。 – NathanOliver

回答

14

而不是一個正則表達式,你可以做很容易對自己的東西,並使用URL過濾在filter_var

if (filter_var($url, FILTER_VALIDATE_URL)) { ... 
+1

在它自己這並不回答OP的問題,'filter_var('hxxpabc://example.com',FILTER_VALIDATE_URL)'是有效的? –

+2

如果'filter_var'產生一個肯定的結果,你可以用'parse_url'來檢查它。這允許您提取部分URL,例如方案(http,https,hxxpabc)。 – Halcyon

+0

@FritsvanCampen確實 –

7

或者你可以做到這一點沒有正則表達式。雖然你還需要驗證URL想象http://">bla</a><script>alert('XSS');</script>作爲傳遞的值,因爲URL

<?php 
$url = 'http://example.com'; 

if(in_array(parse_url($url, PHP_URL_SCHEME),array('http','https'))){ 
    if (filter_var($url, FILTER_VALIDATE_URL) !== false) { 
     //valid url 
    }else{ 
     //not valid url 
    } 
}else{ 
    //no http or https 
} 
?> 
0

你無法看到您的完整的相關代碼。所以,不知道,爲什麼它不爲你工作,但對於網址驗證,您可以檢查以下線鏈接的詳細討論:

PHP validation/regex for URL

+0

對不起,我更新了線程 –

0

要使用網站的網址驗證用戶輸入這是好事,允許有或沒有方案和有或沒有www,然後在視圖添加方案設置爲外部網址。

$withWww = 'www.' . str_replace(array('www.'), '', $value); 
    $withScheme = 'http://' . str_replace(array('http://', 'htttps://'), '', $withWww); 
    $headers = @get_headers($withScheme); 
    if (strpos($headers[0], '200') === false) { 
     return false; 
    }