You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用白名单对象验证URL字符串,如何标记非白名单参数与取值?

URL参数白名单验证实现方案

实现思路

  • 白名单数据改用Set结构存储,查询时间复杂度为O(1),比普通数组/对象效率更高
  • 采用浏览器原生URL、URLSearchParamsAPI解析链接,避免手动分割字符串的边界问题(比如无query参数、参数带特殊转义字符等场景)
  • 遍历参数时两步校验:先校验参数名是否合法,再校验参数对应的每个取值是否匹配对应白名单

完整实现代码

// 合法参数白名单,用Set存储
const validParams = new Set([
  "brand",
  "item",
  "size",
  "country"
])

// 各参数对应取值白名单,每个参数对应一个Set
const validValueMap = {
  brand: new Set(["nike", "adidas", "puma"]),
  item: new Set(["trainers", "jackets", "socks"]),
  size: new Set(["S", "M", "L", "XL"]),
  country: new Set(["CN", "US", "JP", "UK"])
}

export const Validate = (link) => {
  const errors = {
    invalidParams: [], // 存储不合法的参数名
    invalidValues: []  // 存储不合法的参数取值,格式为{param: 参数名, value: 非法取值}
  }

  try {
    const url = new URL(decodeURI(link))
    const searchParams = url.searchParams

    // 遍历所有query参数
    for(const [param, value] of searchParams.entries()) {
      // 第一步:校验参数名是否合法
      if(!validParams.has(param)) {
        errors.invalidParams.push(param)
        continue
      }
      // 第二步:拆分参数值(按空格分割多取值),逐个校验合法性
      const valueList = value.split(' ')
      for(const val of valueList) {
        if(!validValueMap[param].has(val)) {
          errors.invalidValues.push({
            param: param,
            invalidValue: val
          })
        }
      }
    }
  } catch (e) {
    console.error('链接解析失败:', e)
  }

  console.log('校验结果:', errors)
  return errors
}

// 测试示例
Validate("https://example.com/?brand=nike%20adidas%20puma%20cat&item=trainers%20jackets%20socks&random=hello")

测试输出结果

校验结果: {
  invalidParams: [ 'random' ],
  invalidValues: [ { param: 'brand', invalidValue: 'cat' } ]
}

完全匹配需求,可直接标记出非法参数random和非法brand取值cat。

内容的提问来源于stack exchange,提问作者Freddy.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:51:01