设想:
a = 'some%20string';
URI(a) # 抛出
URI::InvalidURIError: bad URI(is not URI?)
在将字符串传递给 URI 之前,如何检查字符串是否是有效的 URI?
设想:
a = 'some%20string';
URI(a) # 抛出
URI::InvalidURIError: bad URI(is not URI?)
在将字符串传递给 URI 之前,如何检查字符串是否是有效的 URI?
您仍然可以使用所要求的原始方法,只需将其包装在某种错误处理中:
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
我找不到方法,但是查看 的源代码,URI
它执行了一个简单的检查:
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