我正在尝试输入数字。我已经这样做了我的文本框只能通过这段代码接受数字:
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插件。谢谢。
答案 0 :(得分:67)
对于整数使用
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&lt;&lt;在此处了解有关Regex的更多信息。
如果您不确定该数字是整数还是浮点数,只需使用第二个......
答案 1 :(得分:37)
最简单的方法:
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”,将用','而不是''
分割数字