在数字之间增加空间?

use*_*788 34 html javascript textbox numbers space

我正在尝试输入数字.我已经这样做了我的文本框只通过这段代码接受数字:

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;
}
Run Code Online (Sandbox Code Playgroud)

但现在问题来了,我如何在用户输入数字时创建空格,就像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
Run Code Online (Sandbox Code Playgroud)

等等...

我试图从右边读取每3个字符的输入并添加一个空格.但是我的方式效率很低,当我在文本框中将值从1000更改为1 000时,它会出于某种原因选择它,在此之后按任何键,擦除整个事情.

如果你知道如何做到这一点,请不要使用像jQuery这样的javascript插件.谢谢.

Ish*_*med 77

对于整数使用

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

对于浮点数,您可以使用

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

这是一个简单的正则表达式工作.https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions <<在此处查找有关Regex的更多信息.

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

  • 很高兴看到对该模式的解释。 (5认同)

Але*_*вей 44

最简单的方法:

1

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

2

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

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果不起作用,请将参数设置为:"toLocaleString('ru-RU')"参数"en-EN",将数字拆分为','而不是''

  • 第一个示例仅在您位于同一区域时为您提供空格。'en-US' 会显示一个逗号,而且它还取决于浏览器和用户设置。这不是万无一失的解决方案。/sf/answers/1131055971/ (10认同)