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

原生JavaScript检查文件扩展名是否在数组中出错求助

问题分析与解决
  • 核心错误:你定义允许的文件类型时用了('pdf','doc','docx'),这是逗号表达式,最终filetypes的值是最后一个字符串'docx',而非数组。当你在字符串上调用indexOf(),只要扩展名是该字符串的子串就会返回非负位置,比如扩展名是'x'也会返回2,导致判断逻辑完全失效。

  • 修正步骤:

    1. 将filetypes改为数组格式,用方括号[]包裹元素
    2. 可选补充:将扩展名转为小写,避免大小写不匹配的问题(比如用户上传PDF或Docx格式文件)

修正后的完整代码:

const actualBtn = document.getElementById('userfile');
const fileChosen = document.getElementById('file-chosen');
// 修正为数组
const filetypes = ['pdf','doc','docx'];

actualBtn.addEventListener('change', function(){
    fileChosen.textContent = this.files[0].name;
    let fileName = this.files[0].name;
    let extension = fileName.split(".").pop();

    // 统一转为小写,兼容大小写不同的扩展名
    extension = extension.toLowerCase();
    
    if(filetypes.indexOf(extension) < 0) {
        console.log(`不支持的文件格式:${extension}`);
    } else {
        console.log(`文件格式合法:${extension}`);
    }
});

额外细节说明:如果用户上传的文件名没有扩展名(比如直接叫readme),split(".")后pop()得到的是文件名本身,这时候会被判定为不支持,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:26:01