我想检查一个值是否在接受的范围内。如果是,就做某些事情;否则,做其他事情。
这个范围是0.001-0.009
。我知道如何使用多个if
来检查这个范围,但我想知道是否有任何方法可以在单个if
语句中检查它。
这个范围是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
(注意:对于点号字符需要进行反斜杠转义),$
:仅后面没有其他字符。如果您已经在使用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) {
// 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 ;
}
const inRange = (num, num1, num2) => Math.min(num1, num2) <= num && Math.max(num1, num2) >= num;
如果您想使inRange包括范围数字(num1、num2)并且不依赖于它们的顺序,可以像这样:
这里是一个简短的ES6函数:
const inRange = (num, min, max) => num >= min && num <= max
&&
运算符是逻辑 AND 运算符,用于判断两个条件是否同时成立。如果两个条件都为真,则表达式的结果为真;否则为假。 - Šime Vidas