# Check if a value is within a range of numbers

I want to check if a value is in an accepted range. If yes, to do something; otherwise, something else.

The range is `0.001-0.009`. I know how to use multiple `if` to check this, but I want to know if there is any way to check it in a single `if` statement. You're asking a question about numeric comparisons, so regular expressions really have nothing to do with the issue. You don't need "multiple `if`" statements to do it, either:

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

You could write yourself a "between()" function:

``````function between(x, min, max) {
return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
// something
}
`````` Here is an option with only a single comparison.

``````// 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
`````` I like Pointy's `between` function so I wrote a similar one that worked well for my scenario.

``````/**
* 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;
}
``````

so if you wanted to see if `x` was within ±10 of `y`:

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

I'm using it for detecting a long-press on mobile:

``````//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 you want your code to pick a specific range of digits, be sure to use the `&&` operator instead of the `||`.

``````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
}`````` You must want to determine the lower and upper bound before writing the condition

``````function between(value,first,last) {

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

}
`````` If you're already using `lodash`, you could use the `inRange()` function: 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
`````` If you must use a regexp (and really, you shouldn't!) this will work:

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

should work, i.e.

• `^` nothing before,
• followed by `0.00` (nb: backslash escape for the `.` character)
• followed by 1 through 8, and any number of additional digits
• or 9, followed by any number of zeroes
• `\$`: followed by nothing else