Conseguir um valor inteiro de uma caixa de texto, como verificar se é NaN ou nulo, etc?
-
16-09-2019 - |
Pergunta
Eu estou puxando um valor via JavaScript a partir de uma caixa de texto. Se a caixa de texto estiver vazio, ele retorna NaN
. Eu quero retornar uma string vazia se é nulo, vazio, etc.
O cheque que eu faço? if(NAN = tb.value)
?
Solução
Hm, algo é duvidoso aqui.
Em que o navegador faz um retorno caixa de texto vazia NaN? Eu nunca vi isso acontecer, e eu não posso reproduzi-lo.
O valor de uma caixa de texto é, na verdade, uma string. Uma caixa de texto vazia retorna uma string vazia!
Oh, e para verificar se algo é NaN, você deve usar:
if (isNaN(tb.value))
{
...
}
Nota: O isNaN()
-função true
retornos para qualquer coisa que não pode ser analisado como um número, com exceção de strings vazias. Isso significa que é uma boa seleção para entrada numérica (muito mais fácil do que expressões regulares):
if (tb.value != "" && !isNaN(tb.value))
{
// It's a number
numValue = parseFloat(tb.value);
}
Outras dicas
Você também pode fazê-lo desta maneira:
var number = +input.value;
if (input.value === "" || number != number)
{
// not a number
}
NaN é igual a nada, nem mesmo a própria.
Se você não gosta de usar + para converter String para Number, use o parseInt normal, mas lembre-se sempre dar uma base
var number = parseInt(input.value, 10)
caso contrário, "08" torna-se 0 porque o Javascript acha que é um número octal.
Supondo que você tenha uma referência para a caixa 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;
}
Uma coisa que você poderia fazer é uma verificação de regex sobre o valor da caixa de texto e verifique se ele se encaixa o formato de um número aceito, e, em seguida, se ele se encaixa o formato de realizar o seu processo, caso contrário retorna uma string vazia.
Editar : Este é um exemplo de algum código que eu tenho na minha frente (pode não ser a melhor expressão 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 : Gostaria também de salientar que estou usando ASP.NET é por isso que eu tenho a maneira um pouco descolados de acessar a caixa de texto. No seu caso regularmente JavaScript pode não ser tão confuso.