在javascript中对IF中的多个or语句进行分组

在javascript中对IF中的多个or语句进行分组,javascript,jquery,Javascript,Jquery,以下代码起作用: $(".valClear").each(function () { if ($(this).val().indexOf(".png") == -1) { $(this).val(''); } }); 但是,这并不意味着即使该值包含.png或.jpeg,它也会被删除,我做错了什么 $(".valClear").each(function () { if (($(this).val().indexOf

以下代码起作用:

$(".valClear").each(function () {
        if ($(this).val().indexOf(".png") == -1) {
            $(this).val('');
        }
    });
但是,这并不意味着即使该值包含.png或.jpeg,它也会被删除,我做错了什么

$(".valClear").each(function () {
        if (($(this).val().indexOf(".png") == -1) || ($(this).val().indexOf(".jpeg") == -1)) {
            $(this).val('');
        }
    });
你在做一个手术,看起来你想要一个手术,就像这样:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
使用OR逻辑,值很可能不包含其中任何一个,而另一部分将为true,您需要and,这意味着它在值中既没有and也没有and

您还可以对其进行一些优化,如下所示:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
为了避开这个问题,针对您的实际问题……我实际上会改变您的做法,使用一系列允许的扩展并检查它,如下所示:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
。您可以从格式中看到,这更易于扩展,以便以后允许进行其他扩展。

您正在执行OR,看起来您想要一个,如下所示:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
使用OR逻辑,值很可能不包含其中任何一个,而另一部分将为true,您需要and,这意味着它在值中既没有and也没有and

您还可以对其进行一些优化,如下所示:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
为了避开这个问题,针对您的实际问题……我实际上会改变您的做法,使用一系列允许的扩展并检查它,如下所示:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});
$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});
var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});
。您可以从格式中看到,这更易于扩展,以便以后允许进行其他扩展。

您必须使用和:

如果字符串以.jpeg结尾,则第一个表达式的计算结果将为true。 true或false==true第二个表达式甚至不会被计算

另一个选项是否定整个表达式并测试.png和.jpeg是否包含,而不是不包含:

!($(this).val().indexOf(".png") > -1) || ($(this).val().indexOf(".jpeg") > -1))
您必须使用和:

如果字符串以.jpeg结尾,则第一个表达式的计算结果将为true。 true或false==true第二个表达式甚至不会被计算

另一个选项是否定整个表达式并测试.png和.jpeg是否包含,而不是不包含:

!($(this).val().indexOf(".png") > -1) || ($(this).val().indexOf(".jpeg") > -1))
想想第二个if测试。就像这样说:

如果你晚餐给我的不是烤鸡或冷火腿,那么我就要一些

在这种情况下,你可能会得到一些冷火腿或烤鸡。为什么?因为烤鸡不是冷火腿,因为冷火腿不是烤鸡。你说过只要你得到的不是烤鸡,也不是冷火腿,你就可以接受厨房准备的任何东西,所以这两种东西都符合条件

当然,如果你用and而不是or来表达限定词,那么厨房就必须对剩下的土豆泥进行创造性处理。

想想第二个If测试。就像这样说:

如果你晚餐给我的不是烤鸡或冷火腿,那么我就要一些

在这种情况下,你可能会得到一些冷火腿或烤鸡。为什么?因为烤鸡不是冷火腿,因为冷火腿不是烤鸡。你说过只要你得到的不是烤鸡,也不是冷火腿,你就可以接受厨房准备的任何东西,所以这两种东西都符合条件


当然,如果你用and而不是or来表达限定词,那么厨房就必须对剩下的土豆泥进行创造性处理。

这里有一个and/or条件的替代方案。如果该值与regexp不匹配,则

$(".valClear").each(function () {
  if ( !$(this).val().match(/\.(png|jpeg)/) ) {
    $(this).val('');
  }
});

这里有一个和/或条件的替代方案。如果该值与regexp不匹配,则

$(".valClear").each(function () {
  if ( !$(this).val().match(/\.(png|jpeg)/) ) {
    $(this).val('');
  }
});

该代码的目的是什么@Heikki,循环10个文件上传,看看它们是否包含.png、.jpeg、.bmp。如果他们不删除当前文件。@Dykam,这也是服务器端强制执行的,所以不,它在任何方面都不易受攻击。啊,好的。刚刚警告过。这是一个常见的陷阱。该代码的目的是什么@Heikki,循环10个文件上传,看看它们是否包含.png、.jpeg、.bmp。如果他们不删除当前文件。@Dykam,这也是服务器端强制执行的,所以不,它在任何方面都不易受攻击。啊,好的。刚刚警告过。这是一个常见的陷阱。@尼克-不过你正在检查-1,这意味着对于这次上传,你要检查的那个文件没有.png和.jpeg,在任何其他情况下,请清除该字段。对于or,它总是真的,您要检查并确保在这里两者都不是真的……试试看,它会给您预期的结果。@Nick Craver,这段代码保留了.png,但删除了所有不是.png的内容。它应该保留jpegalso@nick-您确定要测试.jpeg而不是.jpg吗?另外,请确保您的代码与我上面的代码完全相同,您可以看到它在这里工作:@nick-注意扩展的多样性,比如.jpg!!正则表达式对我来说已经开始不流行了,但我至少要尝试一个测试,看看正则表达式是否比数组搜索更快。@nick-你正在检查-1,这意味着对于这个上传,你要检查的正则表达式没有。p
ng并且没有.jpeg,在任何其他情况下,请清除该字段。对于or,它总是真的,您要检查并确保在这里两者都不是真的……试试看,它会给您预期的结果。@Nick Craver,这段代码保留了.png,但删除了所有不是.png的内容。它应该保留jpegalso@nick-您确定要测试.jpeg而不是.jpg吗?另外,请确保您的代码与我上面的代码完全相同,您可以看到它在这里工作:@nick-注意扩展的多样性,比如.jpg!!正则表达式对我来说已经开始不流行了,但我至少要尝试一个测试,看看正则表达式是否比数组搜索更快。