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

37
在我的 Rails 应用中,我需要验证用户输入的 URL 是否真的是一个 URL。我只关心 HTTP 协议(也许 HTTPS,但我还没有研究过),这让我相信在 Rails 中可能已经有一些可以为我完成这项工作的东西。
如果没有:您能推荐一个正则表达式字符串吗?我通过谷歌找到了一些,但根据用户评论,它们似乎都有一两个问题。
谢谢
2个回答

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

这是一个非常简单的例子。使用URI库的优点是,您可以执行复杂的检查。

实际上,现在我已经编写了一些测试,使用了一堆不同的无效URL,我发现这种方法将“http://foo.invalid”验证为true。也许我需要再多尝试一下? - Emil Ahlbäck
因为它实际上是一个有效的URI。如果你想要验证一个URL,请确保#path和#scheme存在。 - Simone Carletti
它检查一个有效的HTTP(s) URL方案。 - Simone Carletti
"%w(stringone stringtwo stringthree)" 是一个快捷方式,用于创建给定字符串的数组。 - Ashley
1
在这种情况下使用异常处理是过度的。请使用以下答案:https://dev59.com/7HI-5IYBdhLWcg3wiY3a (url =~ URI::regexp) - Dennis
显示剩余4条评论

4

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

验证 :url 的格式必须为 http 或 https。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接