我的目标是转换表单输入,如“100 MB”或“1 GB”,并将其转换为可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:
def quota_convert
@regex = /([0-9]+) (.*)s/
@sizes = %w{kilobyte megabyte gigabyte}
m = self.quota.match(@regex)
if @sizes.include? m[2]
eval("self.quota = #{m[1]}.#{m[2]}")
end
end
这有效,但前提是输入是倍数(“千兆字节”,而不是“千兆字节”)并且由于使用eval
. 所以,功能正常,但我今晚睡不好觉。
有什么指导吗?
编辑: - - -
好的。出于某种原因,带有 (.*?) 的正则表达式在我的设置中无法正常工作,但我已经使用 Rails 的东西解决了它。另外,我意识到字节对我来说会更好。
def quota_convert
@regex = /^([0-9]+\.?[0-9]*?) (.*)/
@sizes = { 'kilobyte' => 1024, 'megabyte' => 1048576, 'gigabyte' => 1073741824}
m = self.quota.match(@regex)
if @sizes.include? m[2].singularize
self.quota = m[1].to_f*@sizes[m[2].singularize]
end
end
这会捕获“1 兆字节”、“1.5 兆字节”和大多数其他内容(我希望如此)。然后,无论如何,它都使它成为单数版本。然后它会做乘法并吐出神奇的答案。
这是合法的吗?
再次编辑:请参阅下面的答案。比我的废话要干净得多。