2013-05-19 114 views
17

我正在嘗試輸入數字。我做了,所以我的文本框只能通過該代碼接受數字:在數字之間添加空格?

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

但現在的問題來,我將如何創造空間爲用戶鍵入他們的人數,很像iPhone的電話間距的事情,但是如果輸入的數字是1000,那麼它將變成1 000;

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

等...

我試圖讀取每個3個字符右側的輸入並添加一個空格。但我的方式效率低下,當我在文本框中將值從1000更改爲1 000時,它會因某種原因選擇它,然後在此之後進行任何按鍵操作,將整個事件擦除。

如果你知道如何做到這一點,請不要使用jQuery等javascript插件。謝謝。

+1

一句警告:這確實很難正確。如果我在輸入中間點擊鼠標並添加一個數字,該怎麼辦?我在什麼地方移動光標並點擊粘貼?撤銷和重做有多好?處理鍵盤輸入比接受正確類型的字符序列要多得多。 – RichieHindle

回答

40

對於整數使用

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

浮點數可以使用

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

這是一個簡單的正則表達式的工作。 https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions < <在這裏找到關於正則表達式的更多信息。

如果你不能確定數量是否是整數或浮點數,只需用一個2號...

18

最簡單的方法:

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 

如果你想 '' 而不是'「:

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 

如果不工作,設置參數,如: 「的toLocaleString( 'RU-RU')」 參數「 en-EN「,將按'''分割,而不是''

+0

偉大的解決方案! – ChangeTheWay

+0

整潔的答案!謝謝! –