2011-12-27 93 views
1

我有這樣的代碼,到目前爲止,它會檢查其是否具有HTTP://在它的面前,如果如「google.co.uk」被輸入,它會在它的前面添加http://。徹底檢查輸入的字符串是一個URL

但是它並沒有得到解決,當人們穿上,說:「你好」,它會再添加http:在它前面//並將其視作一個URL。我需要一些能夠檢查到底是否有後綴的東西。

function checkURL($url) { 

if (empty($url)) 

{ 
    return $url; 


} 
else { 

if (preg_match('[a-z0-9-]i', $url)) { 

    return $url; 

    } else { 

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

} 
else { 

    $url = 'http://'.$url.''; 
    return $url; 
    } 

}

然後又是簡單的檢查,一旦它返回。

請幫忙!

+0

你已經佔了用戶在其中輸入一個查詢字符串的URL的情況呢? – 2011-12-27 17:45:03

+0

不,爲什麼會這樣呢? – HarryBeasant 2011-12-27 18:16:32

+0

,因爲實際上,鏈接引用與TLD結束 - 埃杜,.COM,.org等,這是您要驗證後綴;然而,查詢字符串會在該邏輯中引發一個問題,因爲這意味着URL不會以TLD結束。因此,您可以檢查後綴,但不能在文本的末尾。或者,您可以使用「?」分解文本作爲分隔符,然後您可以應用您的邏輯。這應該也 – 2011-12-27 18:21:56

回答

4

不重新發明輪子。

使用本:

if (filter_var('someurl.com', FILTER_VALIDATE_URL) === true) { 

http://php.net/manual/en/function.filter-var.php

+0

良好的通話,我不知道該選項上filter_var存在。 – 2011-12-27 19:42:40

+0

只對http://驗證,而不是後綴。 – HarryBeasant 2011-12-27 19:46:02

+0

@ user1063679過濾器驗證URL是一個有點複雜得多,「只驗證對於http://」 http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view =標記 – dqhendricks 2011-12-28 09:10:31

0

的一個很好的正則表達式被撲滅通過John Gruber here

+0

工作,可這在功能的preg_match使用? – HarryBeasant 2011-12-27 17:55:22

相關問題