将多个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捕捉得很好。是的,%
确实需要转义,因为它是转义字符。已修复。