2013-10-19 50 views
0

注意:我使用的是較早的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

回答

0

試試這個:

if (preg_match("/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/", $url)) { 
    echo "URL is valid"; 
}else { 
    echo "URL is invalid<br>"; 
} 
+0

這真棒..非常感謝。 –

+0

這是胡扯。我可以用'/\./'獲得相同的結果。這並不意味着網址是有效的。 – pguardiario

+0

@pguardiario用'convertUrl'函數測試它,我提到了我的問題,我測試了幾乎所有的可能性,它完成了完美的工作。 –

1

如果您想驗證互聯網網址的,加支票,包括一個點(。)字符的REG -EX。

Note: http://blahblahblah is a valid url as is http://localhost

+0

是通過'http:// localhost'是有效的,但因爲我的網站是網上,這樣我爲什麼允許通過'http:// localhost' ..謝謝爲你的答案,我確實需要編輯正則表達式,以便它可以檢查是否有'.'或不。 –

+0

如果我的回答對您有幫助,您可能需要將其標記爲已接受的答案。 – adesh