私が持っていると言う
str = "a=2&b=3.05&c=testing"
走る
require 'cgi'
out = {}
CGI::parse(str).each { |k,v| out[k] = v[0] }
私が出力するときa
、2は、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
基本的な例で動作するようです。これについて何か危険なことはありますか?