2011-06-23 19 views
44

Me pregunto si es posible usar en if declaración regex. Quiero verificar si un valor está en un rango aceptado. En caso afirmativo, para hacer algo, de lo contrario, algo más.Verifique un rango de números en una condición if

El rango es 0.001-0.009. Sé cómo usar múltiples if para verificar esto, pero quiero saber si hay alguna forma de verificarlo en una sola declaración if con regex.

+6

' && 'operador? ... –

Respuesta

113

Hace una pregunta sobre comparaciones numéricas, por lo que las expresiones regulares realmente no tienen nada que ver con el problema. No es necesario "múltiples" declaraciones if para hacerlo, ya sea:

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

Se puede escribir usted mismo a "entre()" función:

function between(x, min, max) { 
    return x >= min && x <= max; 
} 
// ... 
if (between(x, 0.001, 0.009)) { 
    // something 
} 
+2

Sí, las expresiones regulares no son adecuadas para la tarea, pero quería una expresión regular. Tu código resuelve la tarea pero no su pregunta. – Leif

+49

Este es un sitio web destinado a ayudar a las personas. No creo que ayude a proporcionar una mala solución. – Pointy

+0

Su codificación es buena, pero no encaja en la pregunta, eso es todo. Sin ofender. Siempre juzgo una solución por lo bien que responde la pregunta. Eso es porque generalmente asumo que las personas saben lo que están pidiendo. La marca de verificación me muestra que este no era el caso con este interrogador. – Leif

12

Si debe utilizar una expresión regular (! y realmente, no debe hacer) esto va a funcionar:

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

debería funcionar, es decir

  • ^ nada antes,
  • seguido de 0.00 (nb: escapar barra invertida para el carácter .)
  • seguido de 1 a 8, y cualquier número de dígitos adicionales
  • o 9, seguido de cualquier número de ceros
  • $: seguida de otra cosa
-5

puntiagudo es correcto, pero si se está utilizando CoffeeScript, el aspecto de sintaxis s algo así como el rubí

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 
1

me gusta la función de puntiagudo between así que escribió una similar que funcionaba bien para mi escenario.

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

lo que si quería ver si era x dentro de ± 10 de y:

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

lo estoy usando para detectar una pulsación larga en el móvil:

//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); 
Cuestiones relacionadas