我试图检查我的字符串中的所有字符是否是以下数字之一:1,2,3,4,5,6,7,8,9,0或小数点和它们是否包含空格。我使用这段代码但它没有用,我无法弄清楚原因:
print("Confirming added item")
local validAmountString = true
print(addScreen.amountTxtField.text)
for i = 1, #addScreen.amountTxtField.text do
local c = addScreen.amountTxtField.text:sub(i,i)
print("Char " .. i .. " in the amount textflied is " .. c)
if c == "0" or c == "1" or c == "2" or c == "3" or c == "4" or c == "5" or c == "6" or c == "7" or c == "8" or c == "9" or c == "." then
validAmountString = true
else
validAmountString = false
end
print(validAmountString)
end
if string.gsub(addScreen.nameTxtField.text, "%s+", "") ~= "" and string.gsub(addScreen.amountTxtField.text, "%s+", "") ~= "" and validAmountString == true then
--Proceed...
end
空格部分正在工作,但出于某种原因,当我尝试在if语句中检查validAmountString == true时,它会停止工作。但是,validAmountString根据我的print语句返回正确的布尔值。
有任何帮助吗? :)
答案 0 :(得分:1)
更简单的方法是使用string.find
local validAmountString = not addScreen.amountTxtField.text:find( "[^%d%.]" )
我担心我不知道为什么validAmountString不正确,但你不必比较布尔值。
if (validAmountString) then
--is equivilent to
if (validAmountString == true) then
答案 1 :(得分:0)
要查看字符串,请参阅KingOfGamesYami的答案。他正在使用一种叫做字符串模式的东西。有关详细信息,请查看Lua参考http://www.lua.org/manual/5.3/manual.html#6.4.1。
“[^%d%。]”匹配不是数字或点的每个字符。因此,如果find返回的内容为nil,则字符串无效
为什么你的程序不能正常工作(如果你想坚持复杂的方式:
检查字符串的每个字符。如果它是一个数字或一个点你是否正确,如果它不是你的假。
因此,假设您将“12A3”作为字符串。 然后validAmountString的最终值为true,因为最后一个字符是数字。所以你指定true 2次,然后为“A”指定false,然后再指定true。你弄乱了你的总结果。
你应该在这里做的是分配validAmountString = validAmountString and true
,否则validAmountString = false
,这样一旦设置就永远不会覆盖false
。
更好,更有效的方法就是在遇到无效字符后简单地停止检查。如果您发现一个无效字符,则无需检查其他字符。
只需在break
validAmountString = false
即可
答案 2 :(得分:0)
您不需要循环来检查它是否包含有效字符。
您只需执行tonumber(string)。如果字符串中除了数字以外的任何其他字符,它将返回nil。