我正在尝试在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。
答案 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.");
}
它的可读性和完美性。