我想检查一个值是否在可接受的范围内。如果是,做某事;否则,别的东西。
范围是 0.001-0.009
。我知道如何使用多个 if
来检查它,但我想知道是否有任何方法可以在单个 if
语句中检查它。
&&
运算符? ...
你问的是关于数字比较的问题,所以正则表达式真的与这个问题无关。您也不需要“多个 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
}
这是一个只有一个比较的选项。
// 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
如果您必须使用正则表达式(实际上,您不应该!)这将起作用:
/^0\.00([1-8]\d*|90*)$/
应该工作,即
之前没有,
后跟 0.00(nb:. 字符的反斜杠转义)
后跟 1 到 8,以及任意数量的附加数字
或 9,后跟任意数量的零
$: 后面没有别的
如果您已经在使用 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
我喜欢 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);
如果您希望代码选择特定范围的数字,请务必使用 &&
运算符而不是 ||
。
if (x >= 4 && x <= 9) { // 做某事 } else { // 做其他事 } // 一定不要这样做 if (x >= 4 || x <= 9) { //做点什么 } else { // 做点别的 }
在编写条件之前,您必须要确定下限和上限
function between(value,first,last) {
let lower = Math.min(first,last) , upper = Math.max(first,last);
return value >= lower && value <= upper ;
}
const inRange = (num, num1, num2) => Math.min(num1, num2) <= num && Math.max(num1, num2) >= num;
如果您想使 inRange 具有包容性并且不依赖于范围数字的顺序(num1,num2),则可能是这样。