Je veux vérifier si une valeur est dans une plage acceptée. Si oui, faire quelque chose; sinon, autre chose.
La plage est 0.001-0.009
. Je sais comment utiliser plusieurs if
pour vérifier cela, mais je veux savoir s’il existe un moyen de le vérifier dans une seule instruction if
.
Vous posez une question sur les comparaisons numériques, de sorte que les expressions régulières n’ont vraiment rien à voir avec le problème. Vous n'avez pas besoin d'instructions "multiple if
" pour le faire:
if (x >= 0.001 && x <= 0.009) {
// something
}
Vous pourriez écrire vous-même une fonction "between ()":
function between(x, min, max) {
return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
// something
}
Si vous devez utilisez une expression rationnelle (et vraiment, vous ne devriez pas!), Cela fonctionnera:
/^0\.00([1-8]\d*|90*)$/
devrait fonctionner, c'est-à-dire.
^
rien avant,0.00
(nb: échappement de barre oblique inverse pour le caractère .
)$
: suivi de rien d'autreVoici une option avec une seule comparaison.
// 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
J'aime la fonction between
de Pointy, alors j’en ai écrit une similaire qui convient à mon scénario.
/**
* 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;
}
donc si vous voulez voir si x
est dans ± 10 sur y
:
var x = 100;
var y = 115;
nearInt(x,y,10) = false
Je l'utilise pour détecter un appui long sur un 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);
Si vous souhaitez que votre code sélectionne une plage de chiffres spécifique, veillez à utiliser l'opérateur &&
au lieu du ||
.
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
}