将多个string.match函数合并到一行中

将多个string.match函数合并到一行中,string,lua,lua-patterns,String,Lua,Lua Patterns,我有一个函数,我需要检查特殊字符,如果我找到一个,就将其打断 这是我试过的 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") en

我有一个函数,我需要检查特殊字符,如果我找到一个,就将其打断

这是我试过的

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的编程书,但无法获取。

如下所示:

if text:match '[&"#$@%%!^*]' then 
  print 'Invalid Character'
end

要匹配一组字符中的一个,需要使用
[set]
符号

因此,以下内容应满足您的要求,并提供更好的故障指示:

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)

local p=string.find(文本,[&“#$@%!^*]);如果是p,则打印(“在“.p”找到无效字符)结束
@EtanReisner:p在我的情况下总是为零。它从不打印。该代码有效。请参阅@EtanReisner:Thane ton。将您的评论作为答案发布。希望在此指出,您在评论中的链接显示该代码几乎有效。请查看第二个测试。“您好,世界%ld”_t@xt“在15(@)而不是10处打印了无效字符(百分比)。我忘了%是否需要加倍。@Josh捕捉得很好。是的,
%
确实需要转义,因为它是转义字符。已修复。