2016-09-13 5 views
1

문자열에있는 모든 문자가 1,2,3,4,5,6,7,8,9 중 하나인지 확인하려고합니다. 0 OR 소수점 및 공백을 포함하는지 여부. 나는이 코드 조각을 사용하고 있지만 작동하지 않는 이유를 알아낼 수 없습니다루아 - 문자열에 유효한 문자가 포함되어 있는지 확인하십시오.

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 

공간 부분이 작동하지만, 어떤 이유로, 나는에 == validAmountString 여부를 확인하려면 true하려고 할 때 내 if 문은 작동을 멈 춥니 다. validAmountString은 print 문에 따라 올바른 부울 값을 반환합니다.

어떤 도움이 필요합니까? :)

+0

뒤에 break을 추가하기 만하면 입력 된 문자열 – Piglet

+0

을 입력 해주세요. 많은 시도를했습니다. 사용자가 입력 한 값입니다. 입력 값에 올바른 부울 값이 표시됩니다 (예 : "200"이면 true). 그러나 그것이 사실 일지라도 그것은 if 문을 전달하지 않습니다. –

+0

문자열에 유효한 숫자가 포함되어 있는지 확인하려고합니까? 이것이 실제 질문 인 경우 질문을 수정하십시오. – ktb

답변

1

string.find 될 것이다 이것에 대해 갈 수있는 쉬운 방법

local validAmountString = not addScreen.amountTxtField.text:find("[^%d%.]") 

내가 validAmountString 사실이 아니라는 이유를 말할 수 없다 두려워,하지만 당신은 부울 값을 비교할 필요가 없습니다 .

if (validAmountString) then 
--is equivilent to 
if (validAmountString == true) then 
+0

안녕하세요, 내 코드를 단축 해 주셔서 감사합니다! 하지만 분명히 사실 일 때 if 문을 전달하지 않는 이유는 아직 모르겠다. –

+0

그가 여기에서하는 일은 : 텍스트에 숫자 나 점이 아닌 문자가 있으면 그 결과는 false이며, 그렇지 않으면 사실입니다. 그렇기 때문에 모든 캐릭터가 유효한지 확인할 필요가 없습니다. 그는 단순히 무효가 있는지 확인합니다. 원래 버전이 올바르지 않아 그의 결과 btw가 거꾸로되었습니다. – Piglet

+0

나는 "허위 또는 진실"한 일이 실제로 무엇을하고 있는지 알지 못합니다. 나는 그런 식으로 사용하지 않았다. –

0

KingOfGamesYami의 답변을 참조하십시오. 그는 문자열 패턴 btw라는 것을 사용하고 있습니다. 자세한 내용은 루아 참조 http://www.lua.org/manual/5.3/manual.html#6.4.1을 확인하십시오.

"[^ % d %.]"는 숫자 또는 점이 아닌 모든 문자와 일치합니다.

당신은 문자열의 모든 문자를 확인 : 반환 뭔가하지만, 전무을 발견한다면, 당신의 문자열은 프로그램이 (인 경우에 당신이 당신의 복잡한 방법에 충실 원하는대로 작동하지 않는 이유를 들어

유효하지 않습니다. 숫자가 맞지 않거나 점이 틀린 점이 있다면 거짓이 아닙니다.

문자열로 "12A3"이 있다고 가정 해 봅시다. 마지막 문자는 a이므로 유효 값은 true입니다. 2 번 진실을 배정한 다음 "A"를 거짓으로 한 다음에 다시 진실을 결정하면 총 결과가 엉망이됩니다.

여기에서해야 할 일은 validAmountString = validAmountString and true을 할당하거나, validAmountString = false을 할당하면 false을 덮어 쓸 수 없습니다.

잘못된 문자를 치면 더 간단하고 효율적으로 수표를 중지하는 것이 좋습니다. 더 이상 유효하지 않은 문자가 있으면 문자를 확인할 필요가 없습니다. validAmountString = false

+0

안녕하세요, 돼지 나는 아직도 이것을 알아 내려고하고 있습니다. 하지만 KingOfGamesYami의 솔루션을 사용한다면 허용 된 숫자 중 하나를 찾으면 var에 true를 할당하지 않을까요? 나는 숯불 중 하나가 유효 할 필요가 없기 때문에, 나는 그것들 모두를 필요로한다. 또한, 내 validAmountString 사실이지만 내 if 문을 전달하지 않는 및 이유를 알아낼 수 없습니다 :/ –

+0

위의 추천을 참조하십시오 – Piglet

+0

그는이 방법을 사용하는 경우 그는 값을 true로 설정하면 안됩니다 루프에서. 일단 틀린 값을 치면 false로 설정하고 마지막 단락에서 말했던 것처럼 루프를 중단하십시오. – KingofGamesYami

관련 문제