我想驗證的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://
請點我在正確的方向。
我想驗證的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://
請點我在正確的方向。
要解決的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);
}
使用filter functions,這裏有一個FILTER_VALIDATE_URL
。
$is_valid_url = filter_var($url, FILTER_VALIDATE_URL);
有一堆選項也see here。
要檢測是否缺少http://
,只需測試您的輸入而不必先修改它,然後嘗試將其前置並在失敗時再次測試。
可以使用strpos這樣:
if (strpos($url,'http://') === false){
$url = 'http://'.$url;
}
您可以使用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
這樣做的問題是,它可以讓他們想要如什麼都用戶類型 - asdsaasdsad它仍然會算作是一個有效的URL – DCSoft 2013-03-16 19:40:48
@DCSoft謝謝:) – HamZa 2013-03-16 20:10:26
謝謝,它的工作原理完美,但你會說時間優化,它會更好地在窗體上運行它作爲JavaScript並停止用戶提交它,或者它會更好地在PHP腳本中執行它? – DCSoft 2013-03-16 20:29:45