用于检查文件扩展名不工作的Javascript If语句

Javascript If statement used to check file extensions not working

本文关键字:Javascript If 语句 工作 检查 文件 扩展名 用于      更新时间:2023-09-26

我有一个表单,人们可以在其中输入文件路径。我想确保他们进入的路径指向图片,所以这里是我认为可行的。

function checkExt()
{
    var extension= /* I know that the code to cut the extension off of the file
                      is working correctly so for now let's just go with it ok */
    if(extension!="jpg" || "gif" || "bmp" || "png" || "whatever else")
        alert("The file extension you have entered is not supported");
}

但这并不奏效。我已经追踪到if语句,因为如果我只选择一种文件进行检查,那么它就会正常工作。所以我想问你的是,我到底需要改变什么才能让这件事正常工作。我已经做了大约三个小时了,这让我很生气。感谢您提前提供的帮助。

这是一个语法和逻辑错误。应该是:

if (extension != "jpg" && 
    extension != "gif" && 
    extension != "bmp" && 
    extension != "png" && 
    extension != "whatever else") {
    // This will execute when the extension is NOT one of the expected 
    // extensions.
}

此外,您可以使用正则表达式更简洁地处理它

if (!/jpg|gif|bmp|png|whatever/.test(extension)) {
    // This will execute when the extension is NOT one of the expected 
    // extensions.
}

附录:

extension的值是而不是支持的值之一时,上面的示例执行if语句的主体。如果您想在extensions的值是支持的值之一时执行If语句的主体,您可以将逻辑从不等于/和更改为等于/或,如下所示:

if (extension == "jpg" || 
    extension == "gif" || 
    extension == "bmp" || 
    extension == "png" || 
    extension == "whatever else") {
    // This will execute when the extension is one of the expected extensions.
}

同样,使用正则表达式会更简洁

// I just removed the leading ! from the test case.
if (/jpg|gif|bmp|png|whatever/.test(extension)) {
    // This will execute when the extension is one of the expected extensions.
}

作为冗长的替代方案,使用正则表达式:

if (extension.search(/jpg|gif|bmp|png/) === -1) {
    alert("The file extension you have entered is not supported.");
}

您应该使用&&而不是||,并且您必须在每个条件下用extension作为!=运算符的前缀,而不仅仅是第一个条件:

if (extension != "jpg" &&
    extension != "gif" &&
    extension != "bmp" && 
    extension != "png" &&
    extension != "whatever else")

您需要在每个子句中包含要进行比较的参数。

if( extension != "jpg" || 
    extension != "gif" || 
    extension != "bmp" || 
    extension != "png" || 
    extension != "whatever else"){
 //TODO: handle condition
}

正如其他人所指出的,这是一个逻辑错误,因为如果"jpg"是扩展名,则条件仍然会被满足,因为"jpg!="gif"。您可能需要考虑使用&&

您必须比较每个测试扩展的变量extension。一种紧凑的方法是:

var extension = whatever;
var supportedExtensions = ["jpg","gif","bmp","png",... whatever else];
if (supportedExtensions.indexOf(extension) < 0) alert("Unsupported extension");

其他答案向您展示了用于多次比较的javascript逻辑是错误的。但是,一个更好的方法是使用这样的javascript映射:

function checkExt() {
    var allowedExtensions = {
        "jpg": true, "gif": true, "bmp": true, "png": true, "whatever else":true
    };
    var extension= /* I know that the code to cut the extension off of the file
                      is working correctly so for now let's just go with it ok */
    if (allowedExtensions[extension] !== true) {
        alert("The file extension you have entered is not supported");
    }
}

只需在allowedExtensions对象中添加/删除项,即可更容易地维护。