DevCN
菜单
全部文章快讯开发科技深度热点

Lua 多返回值:校验分钟数并返回错误原因

限制数字文本长度与字符,再转换和验证范围,使用数值与错误说明两个返回值表达清晰结果。


本节目标

限制数字文本长度与字符,再转换和验证范围,使用数值与错误说明两个返回值表达清晰结果。

环境与运行方法

使用 Lua 5.4 或更新版本。保存为 lesson.lua,运行 lua lesson.lua。只使用标准功能,不需要游戏引擎或外部模块。

核心思路

tonumber 的接受规则可能宽于业务协议。本例只接受一到四位十进制数字文本,不接受符号、小数或空白。失败使用 nil 与原因,而不以零代替。

完整示例

local function minutes(text)
    if type(text) ~= "string" or #text < 1 or #text > 4 or not text:match("^%d+$") then
        return nil, "format"
    end
    local value = tonumber(text)
    if value > 1440 then return nil, "range" end
    return value, nil
end
for _, text in ipairs({"30", "0", "bad", "1441"}) do
    local value, reason = minutes(text)
    if value == nil then print("error=" .. reason)
    else print("ok=" .. value) end
end

预期输出

ok=30
ok=0
error=format
error=range

逐步理解

短路逻辑先检查类型,之后才能安全求长度和匹配。Lua 模式中的 %d 表达数字,不是所有正则方言都通用的写法。格式通过后数值很小,可以直接比较业务上限。

两个返回值让调用者同时获得结果和原因,不需要全局错误变量。这里统一拒绝没有定义的表示形式,如五位的 00000,即使数值上为零,也违反长度约束。

常见问题与边界

  • Lua 模式与常见正则语法不完全一致。
  • 只接收一个返回值会丢失原因。
  • 格式验证不能代替范围验证。

动手练习

测试 "0000"、"-1" 和 "1440"。

参考答案

四个零得到合法零,负号触发格式错误,1440 合法。若需要支持其他形式,应修改契约并补充测试。

下载推广海报

文章推广海报

《Lua 多返回值:校验分钟数并返回错误原因》完整推广海报
DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。