Conseguir un valor entero de un cuadro de texto, la forma de comprobar si es NaN o nula etc?
-
16-09-2019 - |
Pregunta
Estoy tirando un valor medio de JavaScript desde un cuadro de texto. Si el cuadro de texto está vacía, devuelve NaN
. Quiero devolver una cadena vacía si es nulo, vacío, etc.
¿Qué cheque hago? if(NAN = tb.value)
?
Solución
Hm, algo es a pescado aquí.
En lo que hace un navegador de texto retorno vacío NaN? Nunca he visto que esto 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: La función devuelve isNaN()
-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);
}
Otros consejos
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 te 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 un número octal.
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;
}
Una cosa que podría hacer es un cheque de expresiones regulares en el valor del cuadro de texto y asegurarse de que encaja el formato de un número aceptado, y luego si se ajusta el formato de realizar su proceso, de lo contrario devuelve 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 estoy usando ASP.NET que es por eso que tengo la forma ligeramente funky de acceso a la caja de texto. En su caso común de JavaScript que puede no ser tan desordenada.