Моя цель - преобразовать ввод формы, например, «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 мегабайта" и большинство других вещей (я надеюсь).Это тогда делает это единственной версией независимо.Затем он умножает и выплевывает магические ответы.
Это законно?
ИЗМЕНИТЬ СНОВА: см. Ответ ниже.Гораздо чище, чем моя чепуха.