2009-04-27 5 views
7

Sto prelevando un valore tramite JavaScript da una casella di testo. Se la casella di testo è vuota, restituisce NaN. Voglio restituire una stringa vuota se è nullo, vuoto, ecc.Ottenere un valore intero da una casella di testo, come controllare se è NaN o null ecc.?

Che controllo devo fare? if(NAN = tb.value)?

+0

essere più specifica per favore: che cosa è questo testo (un input di testo, textarea, selezionare Elenco o cosa)? Nessun valore 'textbox' (vuoto o non) restituisce NaN da solo a mia conoscenza. – KooiInc

+0

La casella di testo restituisce NaN o la si analizza prima in float/intero (il che significherebbe che parseFloat/Int) restituisce NaN. –

+0

intendevi: if (NAN == tb.value) // (due equivale per confronto) – Jay

risposta

16

Hm, c'è qualcosa di strano qui.

In quale browser viene restituita una casella di testo vuota NaN? Non l'ho mai visto accadere e non riesco a riprodurlo.

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

Oh, e per verificare se qualcosa è NaN, si dovrebbe usare:

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

Nota: La isNaN() -funzione torna 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); 
} 
0

Una cosa che si potrebbe fare è un controllo regex del valore della casella di testo e assicurarsi che si adatti al formato di un numero accettato, e quindi se si adatta al formato eseguire il processo, altrimenti restituire una stringa vuota.

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

Edit 2: Vorrei anche notare che io sono usando ASP.NET è per questo che ho il modo un po 'funky di accedere alla casella di testo. Nel tuo normale caso JavaScript potrebbe non essere così ingombrante.

+0

Questo è in realtà leggermente modificato per questa risposta.Se controlli la cronologia delle revisioni vedrai che la parte originale del codice era controllare i valori decimali. Ho dovuto modificarlo per funzionare per Ints: P – TheTXI

2

È inoltre possibile 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 ti piace usare + 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.

1

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