2013-05-19 109 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

整洁的答案!谢谢! –