2012-06-07 21 views
5
function validInteger(theNumber){ 
    var anyNonDigits = new RegExp('\D','g'); 
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Más arriba es una función que he escrito para validar algunas entradas. Quiero todos los enteros positivos. El problema que estoy enfrentando es con el objeto RegExp. Parece que debería ser súper simple, pero por alguna razón no funciona.Usar una expresión regular para validar si la entrada tiene dígitos no en ella

Por ejemplo, si paso 'f5' me hago cierto, pero si paso '5f', obtengo el falso. También estoy teniendo problemas cuando paso números negativos. -3 no queda atrapado aunque codifique la variable antes de pasarla a RegExp. Puedo solucionar esto agregando '&&parseInt(theNumber)>0' en mi sentencia if, pero creo que el RegExp también debería darse cuenta. ¡Gracias por adelantado!

+1

La expresión regular no funciona porque necesita escapar del carácter '\' porque '\' también tiene significado en la notación literal de cadena. 'nuevo RegExp ('\\ D', 'g');' –

+0

... también, realmente no necesitarías el modificador 'g', ya que suena como si incluso un no dígito fuera suficiente para marcar el entrada. –

+0

@amnotiam gracias por la información sobre por qué lo que estaba haciendo no funcionaba. Las expresiones regulares son algo en lo que todavía soy nuevo. Espero poder cambiarlo pronto. –

Respuesta

11

Simplemente:

function validInteger(theNumber){  
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0; 
} 

Live DEMO

O aún más simple con regex sólo como sugerido por @Eric:

return /^[0-9]\d*$/.test(theNumber); 

Live DEMO

Actualización:

An excellent cheat sheet.

+0

No es necesario 'parseInt (theNumber)> 0':'/^ [1-9] \ d * $/' – Eric

+0

@Eric. Gracias por la sugerencia, la agregué con tu nombre. – gdoron

+0

creo que regex llamaría a una cadena vacía válida ya que '*' es "cero o más", puede usar '+' en lugar de "uno o más" – jbabey

1

si está bien no utilizan RegExp, puede tener:

function validInteger(theNumber){ 
    var number = +theNumber; 

    return number > -1 && number % 1 === 0; 
} 

Suponiendo que se tiene en cuenta 0 número entero positivo, y no querer hacer una distinción entre +0 y -0.

Tenga en cuenta que esta función aceptará cualquier valor para theNumber que se pueda convertir en un Número, por lo tanto no solo como "cadena", y también puede pasar el Número por supuesto.

+0

¿Probablemente quiere decir '-1

+1

sí lo siento, mi error tipográfico. :) – ZER0

+0

@amnotiam. ¿Hay alguna diferencia (sé que hacen cosas diferentes) entre 'if (str.match()) 'y' if (/.../. test (str)) '? – gdoron

0

¡Sé simple!

function validate(num){ 
    return (num | 0) > 0; 
}; 

Esta función devolverá "verdadero" solo para enteros positivos.

+1

Depende de cómo quiera evaluar la notación hexadecimal. '('0xff' | 0)> 0; // verdadero' –

+1

'(" +123 "| 0)> 0' =>' true' => roto ... ':)' – gdoron

Cuestiones relacionadas