Lua | 仅允许表参数的白名单

我试图制作一个允许参数的白名单,因此任何不在白名单表中的提供的参数都将从参数表中删除。

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"
}

--[[
在此处执行某些操作以消除和删除不需要的参数
]]
--args[key] = nil - 将参数从参数表中删除

print(args) - 基于我允许的参数的白名单,输出我想要的结果

catid
filter_mediaType

]]

如何使我的代码检查参数表与我的白名单表并运行我的删除函数以从参数表中删除无用参数。

点赞
用户7396148
用户7396148

我建议更改您的白名单 (whitelist),以允许进行更简单的检查。这可以通过在运行时反转表格来实现,从而允许快速检查和易于维护,正如 Nicol Bolas 指出的那样。

反转表格将白名单 (whitelist) 表格填充为由字符串索引的数字,允许 if 语句的检查为从 args 中的值简单索引。

然后,您可以循环遍历 args 列表并检查参数是否在白名单 (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
2019-02-05 19:49:45