JavaScript中的文件扩展名验证

时间:2012-09-29 21:15:53

标签: javascript file validation

我正在尝试在javascript中验证文件扩展名。当我在if语句中只使用一个参数时,就像这样

     if(ext!='png' ){
                bodyAppend("err","Incorrect file type");
                bodyAppend("br","");
        }

代码有效。但是,如果我添加这样的声明

    if(ext!='png' || ext!='jpg'){
                bodyAppend("err","Incorrect file type");
                bodyAppend("br","");
        }

代码不起作用并且始终返回true。

4 个答案:

答案 0 :(得分:4)

您需要使用&&,而不是||

逻辑问题:

ext!='png' || ext!='jpg'

一旦扩展名是其中一个选项(“png”或“jpg”),它就不是另一个,所以相反的比较将永远为真。如果它是“png”,它不是“jpg”。如果是“jpg”,则不是“png”。

我在SQL查询中遇到了很多这个问题。当你写出一个有很多比较的条件时,试着大声说出来。如果扩展名不是“png”且扩展名不是“jpg”,则抛出错误。

答案 1 :(得分:2)

@ anpgall的答案是正确的,但是如果您最终需要检查大量扩展,则此代码可能更容易维护。

// At the top of your function
var imageExts = ['png', 'jpg', 'gif'];

// later
// Perhaps setting ext to lower case.
if (imageExts.indexOf(ext)  === -1) {
  bodyAppend("err","Incorrect file type");
}

如果您需要定位旧版本的IE,则可以包含此polyfill

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

答案 2 :(得分:1)

我的猜测是你需要&& (和),而不是|| (或)。

使用&&,只有当扩展名不等于两者时才会为假。

对于||,如果例如ext ==='png'则为真,因为另一个条件将返回true(因此整个条件为真),因为它是!==到'jpg'。

答案 3 :(得分:0)

我建议使用jQuery验证JavaScript中的文件扩展名:

<强> HTML

<input id="file" type="file" class="findDocumentGeneral">

<强>使用Javascript / Jquery的

var extension = $('.findDocumentGeneral').val().split('.').pop().toLowerCase();
if (~$.inArray(extension, ['jpg', 'jpeg', 'gif', 'png', 'pdf', 'docx'])) {
    alert(extension); // to see if it works correctly
} else {
    alert("Incorrect file type.");
}

它的可读性和完美性。