Conseguir um valor inteiro de uma caixa de texto, como verificar se é NaN ou nulo, etc?

StackOverflow https://stackoverflow.com/questions/793445

  •  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)?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top