2017-06-11 65 views
1

我一直在嘗試使用FILTER_VALIDATE_URL以及正則表達式來驗證url,但沒有運氣。PHP,使用域名擴展進行網址驗證

例如:

$url = "http://www.stackoverflow"; 

    if (preg_match("/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/", $url)) { 
     echo "URL is valid"; 
    } 
    else { 
     echo "URL is invalid"; 
    } 
     echo("$url is not a valid URL"); 
    } 

上面會顯示有效的URL,即使省略域擴展,同樣也適用於FILTER_VALIDATE_URL

我想什麼是隻有在下面輸入驗證網址格式:

http://www.stackoverflow.com 
https://www.stackoverflow.com 
http://stackoverflow.com 
https://stackoverflow.com 

類似的東西:

http://stackoverflow 
https://stackoverflow 
http://www.stackoverflow 
https://www.stackoverflow 

應該無效。

當然,它應該適用於任何類型的域擴展。

+0

你有更多嘗試嗎?這是現在的代碼?如果是的話,將問題標記爲已解決,如果答案可以幫助你,upvote;) –

回答

0

如果你想與FILTER_VALIDATE_USE工作,acording到documentation,你應該使用:

FILTER_FLAG_HOST_REQUIRED - URL必須包含主機名(如http://www.example.com

,如:

<?php 
$url = "https://www.stackoverflow.com"; 

if (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) { 
    echo("$url is a valid URL"); 
} else { 
    echo("$url is not a valid URL"); 
} 
?> 

這應該工作。希望能幫助到你!

編輯:

代碼的結果:

stackoverflow.com不是一個有效的URL

http://stackoverflow.com是有效的URL

http://www.stackoverflow.com是一個有效的URL

ww.stackoverflow.com不是有效的URL

http://stackoverflow是有效的URL

正如@mickmackusa說,我刪除了正則表達式的片段,如果你想正則表達式,你可以使用:

validate url with regular expressions

或者:

URL Validation REGEX - URL just valid with http://

+0

嘗試驗證'https://www.stackoverflow'它仍然顯示爲有效的url,甚至域擴展名缺失 – Alko

+0

我不知道如何您正在測試代碼,但它完美地工作。 'stackoverflow'不是一個有效的網址。你試過這個代碼嗎?你可以發佈(編輯)你當前的代碼嗎? –

+1

這是一個非常全面的答案,所以我不會去競爭(你可能只是想刪除正則表達式選項)。這裏是disconnect/monkeywrench:https://regex101.com/r/hGnoeA/2 @ JP.Aulet你的模式尋找零個或更多的第二個非捕獲組。當發表評論時,Alko的實際文本被修改了(參見我的演示)在這種情況下,模式使用零量詞匹配第二組。然後第三組匹配應該是第二個。如果你創建了一個零或一個字面的'w {3} \。'組會更好。電子郵件地址可能會變得混亂。使用FILTER。 – mickmackusa