Ottenere un valore intero da una casella di testo, come controllare se è NaN o nullo, ecc?

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

  •  16-09-2019
  •  | 
  •  

Domanda

sto tirando un valore tramite JavaScript da una casella di testo. Se la casella di testo è vuota, restituisce NaN. Voglio tornare una stringa vuota se è null, vuoto, ecc.

Cosa controllo faccio? if(NAN = tb.value)?

È stato utile?

Soluzione

Hm, qualcosa è pescoso qui.

In quale browser fa un ritorno di testo vuoto NaN? Non ho mai visto che questo accada, e non riesco a riprodurre.

Il valore di una casella di testo è, in realtà una stringa. Una casella di testo vuota restituisce una stringa vuota!

Oh, e di verificare se qualcosa è NaN, è necessario utilizzare:

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

Nota: La isNaN()-funzione restituisce true per tutto ciò che non può essere analizzato come un numero, tranne che per le stringhe vuote. Ciò significa che è un buon controllo per l'input numerico (molto più facile che le regex):

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

Altri suggerimenti

Si può anche fare in questo modo:

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

NaN è uguale a nulla, nemmeno se stesso.

se non si desidera utilizzare + convertire da stringa a numero, utilizzare il parseInt normale, ma ricordatevi di dare sempre una base

var number = parseInt(input.value, 10)

altrimenti "08" diventa 0 perché JavaScript pensa che sia un numero ottale.

Supponendo di avere un riferimento alla casella di testo di input:

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

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

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

Una cosa che potreste fare è un controllo regex sul valore della casella di testo e assicurarsi che si adatta il formato di un numero accettato, e quindi se si adatta il formato di eseguire il processo, altrimenti restituisce una stringa vuota.

Modifica : Questo è un esempio da qualche codice che ho di fronte a me (potrebbe non essere la migliore espressione regolare):

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;
}

Modifica 2 : Vorrei anche sottolineare che sto usando ASP.NET che è il motivo per cui ho il modo un po 'funky di accedere alla casella di testo. Nel vostro caso, regolare JavaScript potrebbe non essere così ingombra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top