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

gol*_*pot 2 lua

如何确定一个字符串是否是lua中的整数?例如isInteger("123"),应该是真的。而且isIntger("abc")isIntger("12.3")应该是假的。

Gre*_*een 5

从 Lua 5.2 开始,您可以使用它tonumber来实现。如果你把第二个参数放在里面,字符串将被视为一个数字,应该是一个整数base

print(tonumber("145.5", 10)) -- nil
print(tonumber("145", 10)) -- 145
print(tonumber("-145", 10)) -- -145
Run Code Online (Sandbox Code Playgroud)

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

print(("145.5"):match("^%-?%d+$")) -- nil
print(("145"):match("^%-?%d+$")) -- "145"
print(("-145"):match("^%-?%d+$")) -- "-145"
Run Code Online (Sandbox Code Playgroud)

模式在第5.4.1节中描述。

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


Pig*_*let 4

您可以简单地搜索任何非数字的内容。

local function isInteger(str)

  return not (str == "" or str:find("%D"))  -- str:match("%D") also works

end
Run Code Online (Sandbox Code Playgroud)