0

可能重复:
如何使用 JQuery 在输入类型文件中验证文件扩展名?

这是我的文件扩展验证码,以防止上传不需要的文件

有没有更简单的方法来编码?

有人可以改进吗?

<script>
function onSubmitForm(re) {
    var formDOMObj = document.frmSend;
    var file1 = formDOMObj.attach1.value;

    var pdf=file1.toLowerCase().lastIndexOf(".pdf");
    var doc=file1.toLowerCase().lastIndexOf(".doc");
    var docx=file1.toLowerCase().lastIndexOf(".docx");
    var xls=file1.toLowerCase().lastIndexOf(".xls");
    var xlsx=file1.toLowerCase().lastIndexOf(".xlsx");
    var wps=file1.toLowerCase().lastIndexOf(".wps");


    if (file1  == "" )
    {
        alert("Please pick a file.")
        return false;
    }
    else
    if ( pdf == -1 && doc == -1 && docx == -1 && xls == -1 && xlsx == -1 && wps == -1 )
    {
        alert("File not acceped. Please upload your RESUME in .pdf, .doc, or docx")
        frmSend.reset(re);
        return false;
    }
    else
        return true;
}
</script>
4

5 回答 5

4

为了简化:

var extension = file1.split('.').pop().toLowerCase();
var allowed = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'wps'];

if(allowed.indexOf(extension) === -1) {
    // Not valid.
}

当然,文件不一定包含其扩展名所说的内容。

于 2012-12-24T23:42:52.093 回答
2

正则表达式很强大。

function onSubmitForm(re) {
    var formDOMObj = document.frmSend;
    var file1 = formDOMObj.attach1.value;

    var acceptedTypes = ["pdf", "doc", "docx", "xls", "xlsx", "wps"];
    var re = new RegExp("\\.(" + acceptedTypes.join("|") + ")$");

    if (file1  == "" )
    {
        alert("Please pick a file.")
        return false;
    }
    if (!re.test(file1))
    {
        alert("File not acceped. Please upload your RESUME in .pdf, .doc, or docx")
        frmSend.reset(re);
        return false;
    }
    return true;
}​
于 2012-12-24T23:38:50.420 回答
1

您不需要此代码在您的标签内使用接受

<input type="file" accept="application/pdf,application/msword">
于 2012-12-24T23:40:16.690 回答
0

您还可以将扩展名分配给 var 并在其上执行 switch case,这样如果您愿意,您也可以处理不同的操作,这是另一种可能的更短的解决方案

function onSubmitForm(re) {
    var formDOMObj = document.frmSend;
    var file1 = formDOMObj.attach1.value;
    var ext = file1.match(/\.(.+?)$/)
    ext = ext == null ?"NONE": ext.ext[1].toLowerCase();

    switch (ext) {
        case "":
            alert("Please pick a file.")
            return false;
        case "pdf":
        case "doc":
        case "docx":
        case "xls":
        case "xlsx":
        case "wps":
            return true;
        default:
            alert("File not acceped. Please upload your RESUME in .pdf, .doc, or docx")
            frmSend.reset(re);
            return false;
    }

}
于 2012-12-24T23:42:19.470 回答
0

我认为使用直接的 RegExp 更容易阅读:

function onSubmitForm(re) {
    var formDOMObj = document.frmSend;
    var file1 = formDOMObj.attach1.value;

    if (file1  == "" )
    {
        alert("Please pick a file.")
        return false;
    }
    if (!/\.(doc|docx|pdf|wps|xls|xlsx)$/.test(file1))
    {
        alert("File not acceped. Please upload your RESUME in .pdf, .doc, or docx")
        frmSend.reset(re);
        return false;
    }
    return true;
}
于 2012-12-25T00:09:54.760 回答