2012-04-22 33 views
63

Possible Duplicate:
Check if a variable contains a numerical value in Javascript?¿Determinar si el valor de JavaScript es un "número entero"?

¿Cómo puedo comprobar si la variable es un número entero en jQuery?

Ejemplo:

if (id == int) { // Do this } 

Im utilizando la siguiente para obtener el ID de la URL.

var id = $.getURLParam("id"); 

Pero quiero comprobar si la variable es un número entero.

+13

El "duplicado" comprueba si se trata de un valor * numérico *, no si se trata de un * valor numérico * integral. Sutilmente diferente. –

+0

+1 Esto no es un duplicado aunque la información en el otro asunto es interesante y relevante. Un valor numérico no es necesariamente un número entero. – phn

Respuesta

152

Prueba esto:

if(Math.floor(id) == id && $.isNumeric(id)) 
    alert('yes its an int!'); 

$.isNumeric(id) cheques ya sea numérica o no
Math.floor(id) == id determinará entonces si es realmente en el valor entero y no un flotador. Si se trata de un flotante que lo analiza a int dará un resultado diferente que el valor original. Si es int, ambos serán lo mismo.

+1

Me gusta este enfoque también, y dio un voto positivo – Marc

+0

Esto fallará sutilmente si usa el tipo 'Number' (que es raro, pero es posible) –

+0

@pst no creo que haya obtenido un' Number' dentro de una variable sin usted sabiendo sobre ese hecho, pero sí, esto podría no ser perfectamente a prueba de fallas – bardiir

23

Utilice el método IsNumeric de jQuery.

http://api.jquery.com/jQuery.isNumeric/

if ($.isNumeric(id)) { 
    //it's numeric 
} 

CORRECCIÓN: que no garantizaría un número entero. Esto sería:

if ((id+"").match(/^\d+$/)) { 
    //it's all digits 
} 

Eso, por supuesto, no usar jQuery, pero supongo jQuery en realidad no es obligatorio, siempre y cuando la solución funciona

+0

Esto será verdadero para valores no-int también. '$ .isNumeric (3.14) => true' – bardiir

+0

@bardiir, gracias. Se dio cuenta de que un momento antes lo había publicado y actualizado. – Marc

+0

Ahora tengo algo de curiosidad sobre lo que sería más rápido, una expresión regular como su sugerencia o algún tipo de conversión como en la mía: D – bardiir

47

@bardiir utiliza un método similar para comprobar si una el valor es numérico o no. Sin embargo, este método es mucho más simple.

/* 
    I just realized that +n === parseInt(n) won't filter strings. Hence I modified it. At least now it doesn't require any extra function calls. 
*/ 

function isInt(n) { 
    return +n === n && !(n % 1); 
} 

+n coacciona n a un número. Luego usamos la igualdad estricta (===) para verificar si se trata de un número entero. Simple y eficiente.

Editar: Parece que mucha gente necesita para comprobar los tipos numéricos, por lo que voy a compartir una lista de funciones que utilizo regularmente para ese propósito:

/* 
    -9007199254740990 to 9007199254740990 
*/ 

function isInt(n) { 
    return +n === n && !(n % 1); 
} 

/* 
    -128 to 127 
*/ 

function isInt8(n) { 
    return +n === n && !(n % 1) && n < 0x80 && n >= -0x80; 
} 

/* 
    -32768 to 32767 
*/ 

function isInt16(n) { 
    return +n === n && !(n % 1) && n < 0x8000 && n >= -0x8000; 
} 

/* 
    -2147483648 to 2147483647 
*/ 

function isInt32(n) { 
    return +n === n && !(n % 1) && n < 0x80000000 && n >= -0x80000000; 
} 

/* 
    0 to 9007199254740990 
*/ 

function isUint(n) { 
    return +n === n && !(n % 1) && n >= 0; 
} 

/* 
    0 to 255 
*/ 

function isUint8(n) { 
    return +n === n && !(n % 1) && n < 0x100 && n >= 0; 
} 

/* 
    0 to 65535 
*/ 

function isUint16(n) { 
    return +n === n && !(n % 1) && n < 0x10000 && n >= 0; 
} 

/* 
    0 to 4294967295 
*/ 

function isUint32(n) { 
    return +n === n && !(n % 1) && n < 0x100000000 && n >= 0; 
} 

/* 
    Any number including Infinity and -Infinity but not NaN 
*/ 

function isFloat(n) { 
    return +n === n; 
} 

/* 
    Any number from -3.4028234e+38 to 3.4028234e+38 (Single-precision floating-point format) 
*/ 

function isFloat32(n) { 
    return +n === n && Math.abs(n) <= 3.4028234e+38; 
} 

/* 
    Any number excluding Infinity and -Infinity and NaN (Number.MAX_VALUE = 1.7976931348623157e+308) 
*/ 

function isFloat64(n) { 
    return +n === n && Math.abs(n) <= 1.7976931348623157e+308; 
} 

Hope esto es útil para alguien.

+0

+1 muy agradable ¡solución! – bardiir

+1

Sí, y funciona para todos los casos de prueba posibles, incluidos 'NaN',' Infinity' y '-Infinity'. –

+0

@AaditMShah Me gusta. – Marc

Cuestiones relacionadas