我正在尝试创建一个允许 args 的白名单,以便从 args 表中删除表中不在我的白名单表中的任何提供的 args。
local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
}
local args_whitelist = {
"beforeafter",
"catid",
"childforums",
"display",
"element_id",
"element_type",
"exactname",
"filter_mediaType",
"filter_order",
"filter_order_Dir",
"filter_search",
"filter_tag",
"format",
"id",
"Itemid",
"layout",
"limit",
"limitstart",
"messageid",
"more",
"option",
"order",
"ordering",
"quality",
"query",
"recently",
"recip",
"reply_id",
"return",
"searchdate",
"searchf",
"searchphrase",
"searchuser",
"searchword",
"sortby",
"start",
"task",
"tmpl",
"token",
"view",
"component",
"path",
"extension"
}
--[[
Do something here to eliminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the argument from the args table
print(args) --[[ Output i want based of my whitelist of allowed arguments only
catid
filter_mediaType
]]
Run Code Online (Sandbox Code Playgroud)
如何让我的代码根据白名单表检查 args 表,然后运行我的删除函数以从 args 表中删除垃圾 args。
我建议改变你whitelist
的允许更简单的检查。正如 Nicol Bolas 所指出的,这可以通过在运行时反转表来实现,以允许快速检查和易于维护。
反转whitelist
表格用字符串索引的数字填充表格,允许检查 if 语句是来自 args 的值的简单索引。
然后,您可以遍历args
列表并检查 arg 是否在whitelist
. 如果它出现在whitelist
将值添加到新列表中,我将approved
在我的示例中使用。检查完所有内容后,args
然后设置args = approved
它会清除任何未经批准的值的表。
local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
"beforeafter",
}
local function invert_table(target)
local t = {}
for k,v in pairs(target) do
t[v] = k
end
return t
end
local args_whitelist = invert_table(args_whitelist)
local approved = {}
for _,v in pairs(args) do
if args_whitelist[v] then
approved[#approved + 1] = v
end
end
args = approved
Run Code Online (Sandbox Code Playgroud)