2011-03-16 39 views
30

在我的Rails應用程序中,我需要驗證用戶給出的URL是否確實是一個URL。我只關心HTTP協議(也許HTTPS,我根本沒有考慮過),這使我相信可能已經有一些可以爲我工作的rails。檢查給定的字符串是否爲URL

如果不是:你能推薦一個正則表達式字符串嗎?根據用戶的評論,我在google搜索後發現了一些,但他們似乎都有一兩個問題。

感謝

回答

62

使用URI library

def uri?(string) 
    uri = URI.parse(string) 
    %w(http https).include?(uri.scheme) 
rescue URI::BadURIError 
    false 
rescue URI::InvalidURIError 
    false 
end 

這是一個非常簡單的例子。在正則表達式上使用URI庫的優點是可以執行復雜的檢查。

+0

其實現在我已經寫了一些測試與一羣不同的無效網址的我發現,這種方法驗證的「http://foo.invalid」爲真。也許我只需要擺弄更多? –

+0

因爲它實際上是一個有效的URI。如果您想驗證URL,請確保#path和#scheme存在。 –

+0

示例代碼中的'%w(http https)'是什麼? –

4

validates :url, :format => URI::regexp(%w(http https))

+1

這將錯誤地驗證字符串,如「http:// google.com測試「 –