Javascript 检查值是否在数字范围内

Javascript 检查值是否在数字范围内,javascript,if-statement,Javascript,If Statement,我想检查一个值是否在可接受的范围内。如果是,做某事;否则,还有别的 范围为0.001-0.009。我知道如何使用多个if来检查这一点,但我想知道是否有任何方法可以在单个if语句中检查它。您问的是一个关于数值比较的问题,因此正则表达式与此问题毫无关系。您不需要使用“多个if”语句来执行此操作,或者: if (x >= 0.001 && x <= 0.009) { // something } 如果(x>=0.001&&x=min&&x如果您必须使用regexp(实

我想检查一个值是否在可接受的范围内。如果是,做某事;否则,还有别的


范围为
0.001-0.009
。我知道如何使用多个
if
来检查这一点,但我想知道是否有任何方法可以在单个
if
语句中检查它。

您问的是一个关于数值比较的问题,因此正则表达式与此问题毫无关系。您不需要使用“多个
if
”语句来执行此操作,或者:

if (x >= 0.001 && x <= 0.009) {
  // something
}
如果(x>=0.001&&x=min&&x如果您必须使用regexp(实际上,您不应该这么做!),这将起作用:

/^0\.00([1-8]\d*|90*)$/
应该有效,即

  • ^
    之前什么都没有
  • 后跟
    0.00
    (注意:
    字符的反斜杠转义)
  • 后跟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;
}
我用它来检测手机上的长按:

//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
//如果在范围内,则返回true,否则返回false
范围内的函数(x,最小值,最大值){

return((x-min)*(x-max)如果希望代码选择特定范围的数字,请确保使用
&&
运算符而不是
|


如果(x>=4&&x=4 | | x您必须在写入条件之前确定下限和上限

function between(value,first,last) {

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

}
介于(值、第一个、最后一个)之间的函数{
让lower=Math.min(first,last),upper=Math.max(first,last);

返回值>=lower&&value如果您已经在使用
lodash
,则可以使用
inRange()
函数:

\范围(3,2,4);
//=>正确
_.范围(4,8);
//=>正确
_.范围(4,2);
//=>错误
_.范围(2,2);
//=>错误
_.范围(1.2,2);
//=>正确
_.范围(5.2,4);
//=>错误
_.in范围(-3,-2,-6);
//=>正确

&&
操作员?…您的编码很好,但它不符合问题,仅此而已。无意冒犯。我总是根据解决方案回答问题的好坏来判断解决方案。这是因为我通常假设人们知道他们在问什么。复选标记显示,这个提问者的情况并非如此。好吧,我很感激您所说的g、 但我建议,你可能需要重新考虑这样一个前提,即这里的人们通常“知道他们想要什么”从狭义上讲,这可能是正确的,但这些问题通常反映出一些糟糕的设计决策,应该重新考虑。我已经回答编程问题30年了,所以我已经见过很多次了。当然,我更喜欢更好的问题,其中总的目标得到了明确的解释。在这里,我们真的不知道t他解释了这个问题的原因,所以我们没有上下文。我喜欢使用这样的语法:if(0.001这很好,不管最小值是更低还是最大值更低,它仍然可以工作。事实上,最好叫最小值,最大值,比如开始,结束。非常好的算法,谢谢!有人能不能考虑一下时间复杂度!?我会选择接受的解决方案,因为在Θ(2)处有两个比较比O(4)上的一个比较和三个算术运算要好。我从来没有声称它是你想象的那样。尽管如此,这是一个可行的选择。这有点愚蠢,它不仅可能较慢,而且对于代码的作用也不太明显
// 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
function between(value,first,last) {

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

}