Проверьте диапазон чисел в условии if

интересно, можно ли использовать в if оператор regex. Я хочу проверить, находится ли значение в допустимом диапазоне. Если да сделать что-то иначе что-то другое.

ассортимент 0.001-0.009. Я знаю, как использовать несколько if чтобы проверить это, но я хочу знать, есть ли способ проверить его в одном if заявление с регулярным выражением.

6 ответов


вы задаете вопрос о числовых сравнениях, поэтому регулярные выражения действительно не имеют ничего общего с проблемой. Вам не нужно "несколько 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
}

если вы должны используйте регулярное выражение (и действительно, Вы не должны!) это будет работать:

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

должны работать, т. е.

  • ^ ничего,
  • следовал по 0.00 (nb: побег обратной косой черты для . символ)
  • с последующим 1 до 8, и любое количество дополнительных цифр
  • или 9, а затем любое количество нулей
  • $: и больше ничего

вот вариант только с одним сравнением.

// 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

мне нравится функция поэтому я написал аналогичный, который хорошо работал для моего сценария.

/**
 * 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 был в пределах ±10 от y:

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
}

Pointy прав, но если вы используете CoffeeScript, синтаксис выглядит примерно как ruby

shipping = (x) ->
  switch
    when 0 <= x <= 1500
      150
    when 1501 <= x <= 4000
      350
    when 4001 <= x <= 8000
      550
    when 8001 <= x <= 12000
      750
    when 12001 <= x <= 20000
      950
    when 20001 <= x <= 40000
      1500
    else 3000