Lua如何检查一个字符串是否为十进制整数

5

在Lua中,我如何确定一个字符串是否是整数?例如:isInteger("123")应该返回true。而isIntger("abc")isIntger("12.3")则应该返回false。

2个回答

8

从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中常用的方法。


Lua 5.1 中的负整数怎么处理? - Leszek Mazur
@LeszekMazur,这是你需要的内容;感谢你的提醒。 - Aki

4
你可以简单地搜索任何不是数字的内容。
local function isInteger(str)

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

end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接