将多个string.match函数合并成一行。

我有一个函数需要检查特殊字符并在找到一个时打破它。

这是我尝试过的。

local text = "h!ello\"wor%ld_t@xt.p^*sp&ki#$te"

if (string.match(text, "&") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "\"") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "#") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "$") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "@") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "%%") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "!") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "^") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "*") ~= nil) then
  print("Invalid Character \n")
end

我能够成功地完成这个,但我想把所有东西都放在一行中。看了 Lua 编程书,但没学会。

点赞
用户1009479
用户1009479
如果 text 中包含 '[&"#$@%%!^*]' 中的任意字符,则执行以下操作:

输出 'Invalid Character'
2014-11-26 13:45:58
用户258523
用户258523

使用 [set] 符号1 来匹配字符集中的任意一个字符。因此,以下代码可以实现你需要的功能,并且可以更好地指示失败:

local p = string.find(text, '[&"#$@%%!^*]');

if p then
    print("Invalid character found at "..p)
end

甚至可以包含准确失败的字符:

print("Invalid character '"..text:sub(p,p).."' at position "..p)
2014-11-26 13:58:40