检查字符串是否是有效的URI

时间:2013-08-21 09:52:20

标签: ruby-on-rails ruby

情境:

a = 'some%20string';

URI(a)#throws

URI::InvalidURIError: bad URI(is not URI?)

如何在将字符串传递给URI之前检查字符串是否为有效的URI?

2 个答案:

答案 0 :(得分:2)

您仍然可以使用原始方法,只需将其包装在某种错误处理中:

require 'uri'

u = nil
begin
  u = URI('hi`there')
rescue URI::InvalidURIError => e
  puts "error: #{e}"  #handle error
end

p u if u  #do something if successful

答案 1 :(得分:1)

我找不到方法,但查看URI的{​​{3}},会执行简单的检查:

case uri
when ''
  # null uri
when @regexp[:ABS_URI]
  # ...
when @regexp[:REL_URI]
  # ...
else
  raise InvalidURIError, "bad URI(is not URI?): #{uri}"
end

URI()使用默认解析器,所以这样的东西应该可以工作:

if URI::DEFAULT_PARSER.regexp[:ABS_URI] =~ a || URI::DEFAULT_PARSER.regexp[:REL_URI] =~ a
  # valid
end