私の目的は、「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メガバイト」、およびその他のほとんどのものをキャッチします(願っています)。その後、関係なく単数形になります。次に、掛け算を行い、魔法の答えを吐き出します。
これは合法ですか?
再度編集: 以下の回答を参照してください。私のナンセンスよりもはるかにきれいです。