2015-09-24 30 views
8

Sono nuovo allo sviluppo web e nella mia funzione voglio verificare se un dato valore di stringa è un numero. Nel caso in cui la stringa non sia un numero valido, voglio restituire null.Dattiloscritto: controlla una stringa per il numero

Quanto segue funziona per tutti i casi tranne quando la stringa è "0", nel qual caso restituisce null.

parseInt(columnSortSettings[0]) || null; 

Come evitare che ciò accada. Apparently parseInt non considera 0 come numero intero!

+2

'0' è un valore falsy .. – Hacketo

+2

non ho postato [questo link] (http: //www.codeproject.com/Articles/182416/A-Collection-of-JavaScript-Gotchas) tra un po ', ma vale sempre la pena leggere per chiunque stia imparando/usando javascript – musefan

risposta

9

Dal 0 è agire come falso, in modo da poter utilizzare isNaN() in questo caso

var res = parseInt(columnSortSettings[0], 10); 
return isNaN(res) ? null : res; 
+0

Non dimenticare la 'radix'. – Andy

+0

@Andy: grazie, aggiornato :) –

4

È perché in pratica stai testando 0 che è anche falso. Si può fare

var n = columnSortSettings[0]; 
if(parseInt(n, 10) || n === '0'){ 
    //... 
} 

È inoltre possibile verificare invece se si tratta di un numero

if(typeof(parseInt(n, 10)) === 'number'){ 
    //... 
} 

Ma attenzione causa

typeof Infinity === 'number'; 
typeof NaN === 'number'; 
+0

Non dimenticare la 'radix'. – Andy

+0

@Andy, yup totalmente dimenticato :) – Eric

+0

Grazie a @Eric. Siccome SO mi consente di accettare solo una risposta, ho alzato la tua risposta. –

0

È possibile utilizzare il isNumeric operatore da rxjs biblioteca (importazione rxjs/util/isNumeric

Problemi correlati