我的URI.parse没有在无效字符串

时间:2015-10-28 07:44:43

标签: ruby

我正在尝试验证网址,但我的URI.parse接受任何字符串而不会引发URI::InvalidURIError错误。我做错了吗?

require 'uri'
URI.parse('invalid')
 => #<URI::Generic invalid>

解决方案 我通过检查返回对象的类来修复此问题。在它是URI :: Generic的情况下,我提出了我自己的错误。

3 个答案:

答案 0 :(得分:2)

URI::InvalidURIError无法将参数解析为Object或多字节字符时,会引发它。

irb(main):001:0> url = URI.parse(Object.new)
URI::InvalidURIError: bad URI(is not URI?): #<Object:0x007fcb7c2097a8> 

irb(main):002:0> url = URI.parse('')
URI::InvalidURIError: URI must be ascii only "\u{1f363}"

在这种情况下,invalid被视为path

irb(main):003:0> URI.parse('invalid').path
=> "invalid"

答案 1 :(得分:1)

require 'uri'

if url =~ URI::regexp
    # Correct URL
end

答案 2 :(得分:1)

URI.Parse以不同的方式运作 如果你说u = URI.parse('http://google.com'), 您将获得URI :: HTTP和默认为80的u.port。

如果你说u = URI.parse('google.com'),那么URI::Generic将会u.portURI::InvalidURIError

因此这些不会引起任何错误

到rais require 'uri' URI.parse(URI('invalid')) 你必须传递URI作为URI.parse的参数

所以下面的代码会引发错误

{{1}}