说我有
str = "a=2&b=3.05&c=testing"
我跑
require 'cgi'
out = {}
CGI::parse(str).each { |k,v| out[k] = v[0] }
当我输出a
时,2 是 a string
,当我希望它是Int
out['a'] // "2" (instead of int 2)
out['b'] // "3.05" (instead of float 3.05)
有什么方法可以更正查询字符串中的类型?
更新:
添加了这个方法来测试数字
def is_a_number?(s)
s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
end
并在解析期间
CGI::parse(url).each do |k,v|
val = v[0]
if is_a_number? val
val = val.include?('.') ? val.to_f : val.to_i
end
out[k] = val
end
似乎适用于基本示例。这有什么不安全的吗?