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

如何修改JS代码正确校验文件扩展名是否符合允许/禁止规则

问题原因分析
  • 空字符串分割异常:当allowed变量为空字符串时,执行split(",")会得到包含一个空字符串的数组[""],处理后的allowedArray仅包含空值,所有正常扩展名都无法命中allowedArray.includes(str)判断,导致所有结果返回false。
  • 逻辑不符合业务规则:原代码要求扩展名必须同时在允许列表且不在禁止列表才返回true,没有兼容允许列表为空时的放行规则。
  • 缺少输入统一处理:传入的str参数未做小写转换,若传入大写扩展名会匹配失败。
修复后的代码
var allowed = "";
var disallowed = "xlsx, docx, png";

function testAllowedOrNot(str) {
  // 统一转换输入的扩展名为小写
  const targetExt = str.trim().toLowerCase();

  // 处理禁止列表:分割后去空、去空格、转小写
  const disallowedArray = disallowed.split(",")
    .map(ext => ext.trim().toLowerCase())
    .filter(ext => ext); // 过滤空元素,避免空配置时生成无效空值
  
  // 禁止列表优先级最高,命中直接返回false
  if (disallowedArray.includes(targetExt)) {
    return false;
  }

  // 处理允许列表:分割后去空、去空格、转小写
  const allowedArray = allowed.split(",")
    .map(ext => ext.trim().toLowerCase())
    .filter(ext => ext);

  // 允许列表为空直接放行,否则判断是否在允许列表中
  return allowedArray.length === 0 ? true : allowedArray.includes(targetExt);
}

// 测试用例
console.log(testAllowedOrNot("csv")) // 输出true
console.log(testAllowedOrNot("xlsx")) // 输出false
console.log(testAllowedOrNot("ico")) // 输出true
console.log(testAllowedOrNot("jpg")) // 输出true
console.log(testAllowedOrNot("docx")) // 输出false
逻辑说明
  • 禁止列表优先级最高:只要扩展名在禁止列表内,无论其他配置如何直接返回false
  • 允许列表为空时,所有不在禁止列表的扩展名全部允许,匹配规则1
  • 禁止列表为空时,会直接跳过禁止判断,若允许列表也为空则全部放行,匹配规则2、3
  • 允许列表不为空时,仅允许列表内且不在禁止列表的扩展名返回true
  • 所有扩展名统一转小写处理,避免大小写匹配问题
  • 列表处理时增加空值过滤,避免空字符串分割产生的无效空元素影响判断

内容的提问来源于stack exchange,提问作者Code Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:36:04