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

时间:2014-11-26 12:38:46

标签: 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")
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编程书,但无法获得。

2 个答案:

答案 0 :(得分:3)

像这样:

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

答案 1 :(得分:3)

要匹配一组字符,您需要使用[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)