检查一个值是否在一个数字范围内

我想检查一个值是否在一个可接受的范围内。如果是,则执行某些操作; 否则,执行其他操作。

射程是 0.001-0.009。我知道如何使用多个 if检查这一点,但我想知道是否有任何方法来检查它在一个单一的 if语句。

400475 次浏览

你在问一个关于数值比较的问题,所以正则表达式实际上与这个问题没有任何关系。你也不需要“多个 if”语句来做到这一点:

if (x >= 0.001 && x <= 0.009) {
// something
}

您可以为自己编写一个“ between ()”函数:

function between(x, min, max) {
return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
// something
}

如果 必须的使用 regexp (实际上,你不应该这样做!) ,那么下面的方法可以奏效:

/^0\.00([1-8]\d*|90*)$/

应该可以。

  • 之前没有,
  • 后面跟着 0.00(nb: .字符的反斜杠转义符)
  • 后面跟着1到8,以及任意数量的额外数字
  • 或者9后面跟着任意数量的零
  • 然后就没别的了

我喜欢 Pointy 的 between函数,所以我编写了一个类似的函数,在我的场景中运行良好。

/**
* Checks if an integer is within ±x another integer.
* @param {int} op - The integer in question
* @param {int} target - The integer to compare to
* @param {int} range - the range ±
*/
function nearInt(op, target, range) {
return op < target + range && op > target - range;
}

所以如果你想知道 x是否在 y的 ± 10范围内:

var x = 100;
var y = 115;
nearInt(x,y,10) = false

我用它来检测手机上的长按键:

//make sure they haven't moved too much during long press.
if (!nearInt(Last.x,Start.x,5) || !nearInt(Last.y, Start.y,5)) clearTimeout(t);

这里有一个只有一个比较的选项。

// return true if in range, otherwise false
function inRange(x, min, max) {
return ((x-min)*(x-max) <= 0);
}


console.log(inRange(5, 1, 10));     // true
console.log(inRange(-5, 1, 10));    // false
console.log(inRange(20, 1, 10));    // false

如果希望代码选择特定范围的数字,请确保使用 &&运算符而不是 ||

if (x >= 4 && x <= 9) {
// do something
} else {
// do something else
}


// be sure not to do this


if (x >= 4 || x <= 9) {
// do something
} else {
// do something else
}

在写入条件之前,必须确定下限和上限

function between(value,first,last) {


let lower = Math.min(first,last) , upper = Math.max(first,last);
return value >= lower &&  value <= upper ;


}

如果你已经在使用 lodash,你可以使用 inRange()函数: Https://lodash.com/docs/4.17.15#inrange

_.inRange(3, 2, 4);
// => true


_.inRange(4, 8);
// => true


_.inRange(4, 2);
// => false


_.inRange(2, 2);
// => false


_.inRange(1.2, 2);
// => true


_.inRange(5.2, 4);
// => false


_.inRange(-3, -2, -6);
// => true

const inRange = (num, num1, num2) => Math.min(num1, num2) <= num && Math.max(num1, num2) >= num;

如果您希望使 inRange 具有包含性,而不依赖于范围数的顺序(num1,num2) ,则可以这样做。