Ваши входы структурированы как (одна или несколько цифр ASCII), за которыми следуют (одна или несколько букв ASCII).Вы можете описать это с помощью шаблона ^(%d+)(%a+)$
:
function parseDuration(input)
local count, unit = input:match "^(%d+)(%a+)$"
if not count then
return nil, "invalid duration `" .. input .. "`"
end
Теперь вам нужно просто выполнить преобразование единиц измерения.Таблица секунд в каждой единице - один очень ясный способ сделать это:
local SECONDS_PER = {
s = 1,
m = 60,
h = 60 * 60,
d = 24 * 60 * 60,
w = 7 * 24 * 60 * 60,
-- etc
}
if not SECONDS_PER[unit] then
return nil, "unknown unit `" .. unit .. "`"
end
return tonumber(count) * SECONDS_PER[unit]
end