2014-12-05 58 views
4

我正在做一個完整的工作加減運算程序,作爲一個不錯的小項目。有一件事我很想知道的是,如果有辦法限制對某些字符的輸入(例如1和0爲二進制輸入,A和B爲加或減輸入)。我總是可以用空字符串替換所有不是這些字符的字符來擺脫它們,但是做這樣的事情非常繁瑣。限制字符輸入到特定字符

+3

這樣做,是不是乏味的是一條線('在線=在線:GSUB(「[^ 01]」如果你只需要第一個有效的數字,並且你不想去除輸入,那麼你可以檢查它並拒絕它。「)」)並且在末尾添加':sub(1,1)'。 – 2014-12-05 17:11:29

+1

可以按照這個線程的建議:http://stackoverflow.com/questions/5689566/keypress-event-in-lua一旦你有一個「getch」實現,那麼你可以使用它只允許輸入的字符你要 – Chris 2014-12-06 01:02:31

回答

1

下面是一些簡單的代碼來從用戶輸入過濾掉指定的字符:

local filter = "10abAB" 
local input = io.read() 
input = input:gsub("[^" .. filter .. "]", "") 

filter變量正好被設置爲你希望在用戶的輸入被允許的任何字符。例如,如果您想允許c,請添加c:local filter = "10abcABC"

儘管我假設您從io.read()獲得輸入,但您可能從其他地方獲得了輸入,因此您可以將io.read()替換爲您需要的任何地方。

我的例子中的第三行代碼實際上是過濾了文本。它採用string:gsub要做到這一點,這意味着它也可以寫成這樣:

input = string.gsub(input, "[^" .. filter .. "]", ""). 

這樣寫它的好處是很明顯,輸入意味着是一個字符串。

的GSUB圖案是[^10abAB],這意味着不屬於該圖案的一部分的任何字符將被過濾掉,由於^它們之前和替換模式,這是空字符串,它是在最後一個參數方法調用。

獎金超級短的一行,你可能不應該使用:

local input = io.read():gsub("[^10abAB]", "")