2013-03-16 26 views
2

我想驗證的URL。這是我的代碼:PHP的URL驗證,如果不是有效的修復它

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

此代碼工作,但現在我試圖找出如何添加http://https://如果URL是正確的,但就是缺少開始http://

請點我在正確的方向。

回答

1

要解決的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); 
} 

This may be interesting.

+1

這樣做的問題是,它可以讓他們想要如什麼都用戶類型 - asdsaasdsad它仍然會算作是一個有效的URL – DCSoft 2013-03-16 19:40:48

+0

@DCSoft謝謝:) – HamZa 2013-03-16 20:10:26

+0

謝謝,它的工作原理完美,但你會說時間優化,它會更好地在窗體上運行它作爲JavaScript並停止用戶提交它,或者它會更好地在PHP腳本中執行它? – DCSoft 2013-03-16 20:29:45

6

使用filter functions,這裏有一個FILTER_VALIDATE_URL

$is_valid_url = filter_var($url, FILTER_VALIDATE_URL); 

有一堆選項也see here

要檢測是否缺少http://,只需測試您的輸入而不必先修改它,然後嘗試將其前置並在失敗時再次測試。

1

可以使用strpos這樣:

if (strpos($url,'http://') === false){ 
    $url = 'http://'.$url; 
} 
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你會得到批量的參數容易理解的格式。

所以你的代碼會

​​

注:上面使用URL無效,其用於測試purspose