注意:我使用的是較早的PHP版本,因此
FILTER_VALIDATE_URL
目前不可用。使用正則表達式對舊版php進行的網址驗證
很多很多的搜索後,我仍然無法找到可以覆蓋所有URL結構的可能性確切的答案,但最後我會用這樣的方式:
我使用下面的函數
1)函數來獲得適當的方案
function convertUrl ($url){
$pattern = '#^http[s]?://#i';
if(preg_match($pattern, $url) == 1) { // this url has proper scheme
return $url;
} else {
return 'http://' . $url;
}
}
2)條件,以檢查它是否是一個URL或不
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
echo "URL is valid";
}else {
echo "URL is invalid<br>";
}
猜猜什麼!?它的工作原理如此完美的所有這些可能性:
$url = "google.com";
$url = "www.google.com";
$url = "http://google.com";
$url = "http://www.google.com";
$url = "https://google.com";
$url = "https://www.codgoogleekarate.com";
$url = "subdomain.google.com";
$url = "https://subdomain.google.com";
但是仍然有這個邊緣情況
$url = "blahblahblahblah";
功能convertUrl($url)
將它轉換爲$url = "http://blahblahblahblah";
那麼正則表達式會認爲這是有效的URL而它不是!
如何修改它,以便它不會通過一個URL這種結構http://blahblahblahblah
這真棒..非常感謝。 –
這是胡扯。我可以用'/\./'獲得相同的結果。這並不意味着網址是有效的。 – pguardiario
@pguardiario用'convertUrl'函數測試它,我提到了我的問題,我測試了幾乎所有的可能性,它完成了完美的工作。 –