我正在尝试验证网址,但我的URI.parse接受任何字符串而不会引发URI::InvalidURIError
错误。我做错了吗?
require 'uri'
URI.parse('invalid')
=> #<URI::Generic invalid>
解决方案 我通过检查返回对象的类来修复此问题。在它是URI :: Generic的情况下,我提出了我自己的错误。
答案 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.port
为URI::InvalidURIError
。
因此这些不会引起任何错误
到rais require 'uri'
URI.parse(URI('invalid'))
你必须传递URI作为URI.parse的参数
所以下面的代码会引发错误
{{1}}