LUA |只有表参数白名单

问题描述 投票:1回答:1

我试图让允许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表对我的白名单表中,然后运行我的删除功能从ARGS表中删除垃圾ARGS。

lua lua-table
1个回答
4
投票

我建议改变你whitelist以允许简单的检查。这可以通过反向运行上表允许既快速检查和易维护的,由尼科尔流星锤指出来完成。

反相填充工作表与索引字符串的数字表whitelist,允许if语句是一个简单地从ARGS价值的指标检查。

然后,您可以通过args列表循环,并检查arg是在whitelist。如果它出现在whitelist值添加到一个新的列表,我将在我的例子中使用approved。检查所有然后设置argsargs = 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
© www.soinside.com 2019 - 2024. All rights reserved.