Lua检查字符串是否为十进制整数

如何确定Lua中的字符串是否为整数?例如isInteger("123"),应该返回true。而isInteger("abc")isInteger("12.3")应该返回false。

点赞
用户2858170
用户2858170

你可以简单地搜索任何不是数字的字符。

local function isInteger(str)

  return not (str == "" or str:find("%D"))  -- str:match("%D") 也是可以的

end
2020-06-29 08:25:03
用户4567755
用户4567755

从 Lua 5.2 开始,你可以使用 tonumber 来实现。如果你在其中放置第二个参数,字符串将被视为数字,在 base 中应为整数:

print(tonumber("145.5", 10)) -- nil
print(tonumber("145", 10)) -- 145
print(tonumber("-145", 10)) -- -145

在 Lua 5.1 中,情况有所不同,因为 tonumber 即使指定了 base,也接受任何数字,而不仅仅是整数。我可能会使用 string.match

print(("145.5"):match("^%-?%d+$")) -- nil
print(("145"):match("^%-?%d+$")) -- "145"
print(("-145"):match("^%-?%d+$")) -- "-145"

模式在第 5.4.1 节中描述。

有了这些值,您可以在需要时轻松将它们用作布尔值,并在需要时将它们用作实际整数。如果您正在寻找更简单的严格布尔值结果,请参阅 Piglet 的答案;它更好地描述了这样的意图。我很少遇到这样的需求,因此建议使用 nil/ 值替代方案。这是 Lua 中常用的方法。

2020-06-29 08:25:05