Rag*_*ddy 2 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
Run Code Online (Sandbox Code Playgroud)
我能够成功地做到这一点,但我希望一切都在一行中。翻阅了《Lua编程》书,但没能读懂。
要匹配一组字符中的一个,您需要使用[set]符号1。
因此,以下内容应该可以满足您的要求,并提供更好的失败指示:
local p = string.find(text, '[&"#$@%%!^*]');
if p then
print("Invalid character found at "..p)
end
Run Code Online (Sandbox Code Playgroud)
您甚至可以包含失败的确切字符:
print("Invalid character '"..text:sub(p,p).."' at position "..p)
Run Code Online (Sandbox Code Playgroud)