2013-05-19 17 views
17

Sto provando a inserire un numero. Ho fatto quindi il mio testo accetta solo numeri con questo codice:Aggiunta di spazio tra i numeri?

function isNumber(evt) { 
    evt = (evt) ? evt : window.event; 
    var charCode = (evt.which) ? evt.which : evt.keyCode; 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) { 
     return false; 
    } 
    return true; 
} 

Ma ora la domanda viene a, come vorrei creare spazi come l'utente sta digitando nel loro numero, proprio come telefono spaziatura cosa di iPhone, ma con i numeri, ad esempio, se digitano: 1000 diventerà 1 000;

1 
10 
100 
1 000 
10 000 
100 000 
1 000 000 
10 000 000 
100 000 000 
1 000 000 000 

Etc ...

Ho cercato di leggere l'input da destra per ogni 3 caratteri e aggiungere uno spazio. Ma la mia strada è inefficiente e quando cambio il valore da 1000 a 1 000 nella casella di testo, lo seleziona per qualche motivo, facendo in modo che ogni tasto premuto dopo, cancelli il tutto.

Se si sa come fare questo, si prega di astenersi dall'utilizzare plugin javascript come jQuery. Grazie.

+1

Una parola di avvertimento: questo è davvero difficile da ottenere. Cosa succede se clicco con il mouse nel mezzo dell'input e aggiungo una cifra? Cosa sposto il cursore da qualche parte e premo su Paste? Quanto bene funzionerà con Annulla e Ripristina? C'è molto di più nell'elaborazione dell'input da tastiera rispetto all'accettazione di una sequenza di caratteri di tipo corretto. – RichieHindle

risposta

40

Per gli interi utilizzano

function numberWithSpaces(x) { 
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " "); 
} 

Per i numeri in virgola mobile è possibile utilizzare

function numberWithSpaces(x) { 
    var parts = x.toString().split("."); 
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, " "); 
    return parts.join("."); 
} 

Questo è un lavoro semplice espressione regolare. https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions < < Trova di più su Regex qui.

Se non si è sicuri sul fatto che il numero sarebbe intero o float, basta usare un secondo ...

18

modo più semplice:

var num = 1234567890, 
result = num.toLocaleString() ;// result will equal to "1 234 567 890" 
var num = 1234567.890, 
result = num.toLocaleString() + num.toString().slice(num.toString().indexOf('.')) // will equal to 1 234 567.890 
var num = 1234567.890123, 
result = Number(num.toFixed(0)).toLocaleString() + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString() 
//will equal to 1 234 567.890 123 

Se si vuole '' invece di ' ':

var num = 1234567.890123, 
result = Number(num.toFixed(0)).toLocaleString().split(/\s/).join(',') + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString() 
//will equal to 1,234,567.890 123 

Se non funziona, impostare il parametro del tipo: "toLocaleString ('it-it')" parametro " en-EN ", dividerà il numero con", "invece di"

+0

ottima soluzione! – ChangeTheWay

+0

risposta pulita! Grazie! –

Problemi correlati