检查给定的字符串是否为URL

问题描述:

在我的Rails应用程序中,我需要验证用户给出的URL是否确实是一个URL。我只关心HTTP协议(也许HTTPS,我根本没有考虑过),这使我相信可能已经有一些可以为我工作的rails。检查给定的字符串是否为URL

如果不是:你能推荐一个正则表达式字符串吗?根据用户的评论,我在google搜索后发现了一些,但他们似乎都有一两个问题。

感谢

使用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)'是什么? –

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

+1

这将错误地验证字符串,如“http:// google.com测试“ –