我正在制作一个完全正常工作的加减程序,这是一个不错的简单项目。我想知道的一件事是,是否有办法将输入限制为某些字符(例如二进制输入的1和0以及加或减输入的A和B)。我总是可以用空字符串替换所有不是这些字符的字符来摆脱它们,但做这样的事情是非常繁琐的。
答案 0 :(得分: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]", "")