2009-04-27 21 views
7

Estoy obteniendo un valor a través de JavaScript desde un cuadro de texto. Si el cuadro de texto está vacío, devuelve NaN. Quiero devolver una cadena vacía si es nula, está vacía, etc.Obteniendo un valor entero de un cuadro de texto, ¿cómo verificar si es NaN o nulo, etc.?

¿Qué control debo hacer? if(NAN = tb.value)?

+0

ser más específico, por favor: ¿cuál es el campo respectivo (una entrada de texto, área de texto, lista de selección o qué)? Ningún valor de 'cuadro de texto' (vacío o no) devuelve NaN por sí mismo, que yo sepa. – KooiInc

+0

El cuadro de texto devuelve NaN o lo analiza primero como flotante/entero (lo que significa que parseFloat/Int) devuelve NaN. –

+0

quiso decir: if (NAN == tb.value) // (dos iguales para la comparación) – Jay

Respuesta

16

Hm, algo es sospechoso aquí.

¿En qué navegador devuelve un cuadro de texto vacío NaN? Nunca he visto que eso suceda, y no puedo reproducirlo.

El valor de un cuadro de texto es, de hecho, una cadena. ¡Un cuadro de texto vacío devuelve una cadena vacía!

Ah, y para comprobar si algo es NaN, se debe utilizar:

if (isNaN(tb.value)) 
{ 
    ... 
} 

Nota: El -función isNaN() vuelve true para cualquier cosa que no se puede analizar como un número, a excepción de las cadenas vacías. Eso significa que es un buen cheque de entrada numérica (mucho más fácil de expresiones regulares):

if (tb.value != "" && !isNaN(tb.value)) 
{ 
    // It's a number 
    numValue = parseFloat(tb.value); 
} 
0

Una cosa que podría hacer es revisar la expresión regular del valor del cuadro de texto y asegurarse de que se ajusta al formato de un número aceptado, y luego, si se ajusta al formato, realice su proceso; de lo contrario, devuelva una cadena vacía.

Editar: Este es un ejemplo de algún código que tengo frente a mí (tal vez no sea la mejor expresión regular):

var anum=/(^\d+$)/; 

if (!anum.test(document.getElementById("<%=txtConceptOrderValue.ClientID %>").value)) 
{ 
    alert("Order Value must be a valid integer"); 
    document.getElementById("<%=txtConceptOrderValue.ClientID %>").focus(); 
    return false; 
} 

Editar 2: También debo señalar que yo soy usando ASP.NET y es por eso que tengo la forma un tanto original de acceder al cuadro de texto. En su caso regular de JavaScript, puede no ser tan desordenado.

+0

Eso en realidad se modificó ligeramente para esta respuesta.Si revisas el historial de revisión, verás que el código original fue para verificar valores decimales. Tuve que modificarlo para que funcione para Ints: P – TheTXI

2

También puede hacerlo de esta manera:

var number = +input.value; 
if (input.value === "" || number != number) 
{ 
    // not a number 
} 

NaN es igual a nada, ni siquiera a sí mismo.

si no les gusta usar + para convertir de cadena a número, utilice el parseInt normal, pero recuerde que debe dar siempre una base

var number = parseInt(input.value, 10) 

lo contrario "08" se convierte en 0 porque Javascript piensa que es una número octal.

1

Asumiendo que tiene una referencia al cuadro de texto de entrada:

function getInteger(input) { 
    if(!input || !input.value) return ""; 

    var val = parseInt(input.value, 10); 

    if(isNaN(val)) return ""; 
    else return val; 
} 
Cuestiones relacionadas