1

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

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

代码有效。但是如果我添加这样的 or 语句

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

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

4

4 回答 4

4

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

逻辑问题:

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

是只要扩展名是这些选项之一(“png”或“jpg”),它就不是另一个,所以相反的比较总是正确的。如果是“png”,则不是“jpg”。如果是“jpg”,则不是“png”。

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

于 2012-09-29T21:18:26.090 回答
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

于 2012-09-29T21:22:43.463 回答
1

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

使用 &&,仅当扩展名不等于它们两者时才为假。

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

于 2012-09-29T21:22:36.347 回答
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.");
}

它可读且运行良好。

于 2016-02-19T13:56:39.837 回答