Ottenere un valore intero da una casella di testo, come controllare se è NaN o nullo, ecc?
-
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)
?
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.