2011-07-23 19 views
5

tengo una variable var number="1234", aunque el número es un valor numérico pero es entre "" así que cuando me comprobarlo usando typeof o NaN lo tengo como una cadena.cómo comprobar si un var es cadena o un número usando javascript

function test() 
{ 
    var number="1234" 

if(typeof(number)=="string") 
{ 
    alert("string"); 
} 
if(typeof(number)=="number") 
{ 
    alert("number"); 
} 

} 

llegué siempre alert("string"), puede usted por favor dígame cómo puedo comprobar si se trata de un número?

+0

puesto que está almacenando con "" será sólo de cuerdas. que necesita para dar el número var = 12345 –

+1

Tener un vistazo a las funciones definidas en esta respuesta - http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric – ipr101

Respuesta

4

La línea

var number = "1234"; 

crea un nuevo objeto String con el valor "1234". Al poner el valor entre comillas, estás diciendo que es una cadena.

Si desea comprobar si una cadena solo contiene dígitos numéricos, puede usar regular expressions.

if (number.match(/^-?\d+$/)) { 
    alert("It's a whole number!"); 
} else if (number.match(/^-?\d+*\.\d+$/)) { 
    alert("It's a decimal number!"); 
} 

El patrón /^\d+$/ significa: en el inicio (^) de la cadena, hay un signo opcional menos (-?), entonces un dígito (\d), seguido por cualquier más dígitos (+), y luego el final de la cadena ($). El otro patrón solo busca un punto entre los grupos de dígitos.

+1

Eso funcionará siempre que el valor sea solo dígitos, cualquier otro valor (como -1 o 1.5) devolverá falso. Se ha publicado una función robusta * isNumber() * en respuesta a [Validar números en JavaScript - IsNumeric()] (http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric/1830844#1830844) – RobG

0

porque var number="1234" es una cadena. las comillas dobles lo hacen literal.

si usted quiere un número de utilizar de esta manera

var number = 1234; 

Actualización:

Si usted está tomando el aporte de una etiqueta de entrada porejemplo, el tipo de datos será de cadena, si desea convertirlo a un número, puede utilizar la función parseInt()

var number = "1234"; 

var newNumber = parseInt(number); 

alert(typeof newNumber); // will result in string 
+0

Ibu: Ya Absolutamente, pero mi problema es que estoy obteniendo un cuadro de texto de donde obtengo "1234", ¿cómo puedo eliminar "" para convertirlo en un número. aunque cuando puse alerta sobre los datos que obtuve del cuadro de texto lo recibo como 1234 pero mientras lo reviso me da una cadena – Romi

+0

Ver mi actualización @Romi, usar parseInt() para enteros o parseFloat() para números decimales ayudará a solucionar este problema problema – Ibu

+0

Falla donde la entrada tiene caracteres no numéricos finales. – RobG

2
+0

usando parseInt, convierte "abcd" y "1234" en un entero. lo que me da un resultado incorrecto solo quiero que "1234" se convierta en valor inumericano – Romi

+0

http://jsfiddle.net/bhXbh/51/ – Romi

+0

@Romi, en realidad el valor "numérico" de 'romi' es NaN (no es un número). Quizás deba verificar si la variable resultante esNaN (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/isNaN) – spender

6

Por lo que entiendo su pregunta que está solicitando una prueba para detectar si una cadena representa un valor numérico.

Una prueba rápida debe ser

function test() { 
    var number="1234" 
    return (number==Number(number))?"number":"string" 
} 

Como número, si se invoca sin la palabra clave new convertir la cadena en un número. Si el contenido variable no se modifica (== devolverá el valor numérico a una cadena) se trata de un número. Es una cadena de lo contrario.

function isNumeric(value) { 
    return (value==Number(value))?"number":"string" 
} 

/* tests evaluating true */ 
console.log(isNumeric("1234")); //integer 
console.log(isNumeric("1.234")); // float 
console.log(isNumeric("12.34e+1")); // scientific notation 
console.log(isNumeric(12));  // Integer 
console.log(isNumeric(12.7)); // Float 
console.log(isNumeric("0x12")); // hex number 

/* tests evaluating false */ 
console.log(isNumeric("1234e")); 
console.log(isNumeric("1,234")); 
console.log(isNumeric("12.34b+1")); 
console.log(isNumeric("x")); 
+0

+1 para pruebas unitarias –

+0

Falla donde el valor es cadena vacía o espacios en blanco ya que ambos se convierten en 0 y '0 == '''. – RobG

+0

¡hiciste un buen trabajo! – xgqfrms

0

Conviértela en un número y compárela con la cadena original.

if (parseFloat(the_string,10) == the_string) { 
    // It is a string containing a number (and only a number) 
} 
0

Otra manera fácil:

var num_value = +value; 
if(value !== '' && !isNaN(num_value)) { 
    // the string contains (is) a number 
} 
+0

cadena vacía convierte a cero, por lo que '! IsNaN (+ (''))' da falso. También los espacios en blanco y * null * también se convierten en cero, por lo que devolverán verdadero (aunque en este caso nulo no es un valor esperado). – RobG

+0

@RobG: Mmh. Luego tenemos que agregar otra prueba ... ¡gracias! –

+0

Creo que el más simple es: 'function isNumber (n) { return! IsNaN (parseFloat (n)) && isFinite (n); } 'publicado [aquí] (http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric/1830844#1830844). – RobG

Cuestiones relacionadas