Lua - 检查字符串是否包含有效字符

时间:2016-09-13 11:15:00

标签: string lua corona

我试图检查我的字符串中的所有字符是否是以下数字之一: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语句返回正确的布尔值。

有任何帮助吗? :)

3 个答案:

答案 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。