ruby-on-rails – 在Rails中将filesize字符串转换为千字节等价物
发布时间:2020-12-17 03:26:23 所属栏目:百科 来源:网络整理
导读:我的目标是转换表单输入,如“100兆字节”或“1千兆字节”,并将其转换为我可以存储在数据库中的千字节文件大小.目前,我有这个: def quota_convert @regex = /([0-9]+) (.*)s/ @sizes = %w{kilobyte megabyte gigabyte} m = self.quota.match(@regex) if @siz
我的目标是转换表单输入,如“100兆字节”或“1千兆字节”,并将其转换为我可以存储在数据库中的千字节文件大小.目前,我有这个:
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兆字节”,以及大多数其他东西(我希望).然后它无论如何都使它成为单数版本.然后它进行乘法并吐出魔法答案. 这是合法的吗? 再次编辑:请参阅下面的答案.比我的废话更清洁. 解决方法def quota_convert @regex = /([0-9]+) (.*)s?/ @sizes = "kilobytes megabytes gigabytes" m = self.quota.match(@regex) if @sizes.include? m[2] m[1].to_f.send(m[2]) end end >已添加?正则表达式中的可选复数.>将@sizes更改为复数形式的字符串.>转换m [1](数字为浮点数).>直接发送消息m [2] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |