Lua |仅表参数列入白名单

时间:2019-02-05 17:02:40

标签: lua lua-table

我正在尝试将允许的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。

1 个答案:

答案 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