我正在尝试将允许的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 eleminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the arguement from the args table
print(args) --[[ Output i want based of my whitelist of allowed arguments only
catid
filter_mediaType
]]
如何使我的代码对照我的白名单表检查args表,然后运行我的delete函数从args表中删除垃圾args。
答案 0 :(得分:4)
我建议更改您的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