61

我正在尝试输入数字。我已经做到了,所以我的文本框只接受通过此代码的数字:

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

ETC...

我尝试从右边读取每 3 个字符的输入并添加一个空格。但是我的方法效率低下,当我将文本框中的值从 1000 更改为 1 000 时,它会出于某种原因选择它,然后按下任何键,擦除整个内容。

如果您知道如何执行此操作,请避免使用 jQuery 等 javascript 插件。谢谢你。

4

3 回答 3

130

对于整数使用

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 << 在这里找到更多关于正则表达式的信息。

如果您不确定数字是整数还是浮点数,请使用第二个...

于 2013-05-19T17:03:07.153 回答
78

最简单的方法:

1

var num = 1234567890,
result = num.toLocaleString() ;// result will equal to "1 234 567 890"

2

var num = 1234567.890,
result = num.toLocaleString() + num.toString().slice(num.toString().indexOf('.')) // will equal to 1 234 567.890

3

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

4

如果你想要 ',' 而不是 ' ':

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”,将使用 ',' 而不是 ' ' 分割数字

于 2016-10-06T13:22:41.427 回答
0

此函数在输入中运行良好:

const formatAndVerifyNumericValue = (value, callback) => {
const reg = new RegExp('^[0-9]+$');
let newValue = value.replace(/\s/g, '');
  if (reg.test(newValue)) {
   newValue = newValue.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+. 
     (?!\d))/g, ' ');
   return callback(newValue);
}}
于 2021-10-27T07:08:32.597 回答