我目前正在寻找一种方法来接受用户输入并将其转换为秒。如果某人/用户在下面键入以下任意输入(带有任何整数),则它将返回该输入的第二个等价物
输入示例为:1y,1mth,1d,1h,1m,1s
到目前为止,我已经尝试了多种方法,例如检查输入中的最后一个字母,等等。没有一种方法能够准确地满足我的要求。
答案 0 :(得分:4)
您的输入的结构为(一个或多个ASCII数字),后跟(一个或多个ASCII字母)。您可以使用pattern ^(%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