2012-02-14 8 views
17

Ho una pagina con alcuni elementi che sono controllati dall'utente. Uno di questi è un campo di inserimento del testo, in cui l'utente deve inserire un numero. Tutto funziona bene se l'utente inserisce solo cifre (EG 9000), ma l'utente utilizza la notazione virgola (essendo 9000) javascript non accetta l'input come numero intero.Le virgole che digitano con il numero di input in Javascript

Come posso rimuovere le virgole e/o forzare l'input a un numero intero? Ho provato a usare parseint(), ma non sembra funzionare con le virgole.

+2

Nota che in alcuni paesi la gente utilizzare le virgole per separare i decimali e i punti per separare le migliaia. Si potrebbe voler prendere in considerazione l'utilizzo di una libreria di impostazioni locali per eseguire l'analisi dei numeri. – hugomg

+1

Forse. In questo momento, sono solo negli Stati Uniti. E dovrebbero esserci solo numeri interi. – MrGlass

risposta

34

usare un'espressione regolare globale per sostituire tutti virgole con una stringa vuota:

var str = "12,345,678"; 
str = str.replace(/,/g, ""); 
parseInt(str, 10); 
+0

aggiungi; alla fine delle tue linee e in realtà parseInt (str). Altrimenti, funziona alla grande, grazie. – MrGlass

+0

I punti e virgola sono in realtà opzionali e stavo seguendo il tuo esempio di parseint()! Concedo comunque entrambi i tuoi punti e cambierò :-) – adelphus

+1

L'unica cosa di cui diffidare è qui per le differenze di localizzazione della notazione decimale; virgola contro periodo, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString – kalisjoshua

-1

forse

parseint(ny9000withCommas.replace(/\,/g,"")) 

consente di parlare di restrizione:

si può/dovrebbe consentire all'utente di inserire sia 9000 & 9.000

è possibile controllare validy via REGEX.

sul lato server: è necessario eliminare le virgole e trattarle come numeri interi.

+0

replace() sostituirà solo la * prima * virgola. Se il numero è abbastanza grande da avere più di una virgola, questo non funzionerà. – adelphus

+0

@adelphus grazie modificato. –

0

O, meglio ancora, data l'inaffidabilità generale di input dell'utente, utilizzare questo per sbarazzarsi di tutti i caratteri non numerici :

 
var s = "9,Ljk876"; 
var t = parseInt(s.replace(/[^0-9]/g, '')); 
alert ("s:" + s + ", t:" + t); 

+0

Questa dovrebbe essere la risposta :) –

+1

Questo è sbagliato. Se si utilizza tale regex, sostituirà i decimali che cambierebbero il numero, ad esempio: parseInt ('1.200.34'.replace (/ [^ 0-9]/g,' ')); restituire: 120034 –

+0

L'OP ha chiesto "come posso rimuovere le virgole e/o forzare l'input a un intero", quindi non è sbagliato. – blankabout

3

o meglio ancora

var s="jdjsghd0182.99"; 
var str = parseFloat(s.replace(/[^0-9 | ^.]/g, '')); 
+1

Non sono d'accordo sul fatto che questo sia "migliore". Questo consiglio, così come quello di @ blankabout, sta cambiando l'input da un utente e, una volta fatto, dovresti anche chiedere all'utente se la tua interpretazione del loro input è ciò che realmente intendono. Mentre le virgole sono una deviazione accettabile e prevista, l'aggiunta di altri caratteri non lo è. – kalisjoshua

+0

Grazie per il tuo feedback, ma le virgole non sono solo caratteri accettabili, le persone tendono a mettere $, # ecc. Per le valute e anche le persone tendono ad aggiungere spazi. idee sbagliate comuni i prezzi contengono solo cifre e segni di punteggiatura. (I tedeschi possono scrivere 12, - €). un altro equivoco sei tu a separare i grandi prezzi raggruppando i numeri in terzine (migliaia). (Uno scrive ¥ 1 0000). pQuando si scrive codice, si prega di renderlo accessibile per ogni tipo di utente –

+0

Penso che siamo d'accordo, ma la regex di cui sopra è eccessivamente semplicistica; dovrebbe cercare schemi specifici, non solo un flusso di input che contiene numeri che potrebbero essere interpretati come un numero. Ad esempio, "3 set di 4" non deve essere interpretato come "34" né "3 - 4". Questo è il mio punto, ma forse non ben formulato prima e forse potrebbe anche estendere l'argomento della domanda originale. – kalisjoshua

Problemi correlati