Добавление пространства между цифрами?

Я пытаюсь внести номер ввода. Я сделал так, чтобы текстовое поле принимало цифры только через этот код:

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 в текстовом поле, он по какой-то причине выбирает его, делая после этого любое нажатие клавиши, стирает все это.

Если вы знаете, как это сделать, воздержитесь от использования javascript-плагинов, таких как jQuery. Спасибо.

Ответ 1

Для использования целых чисел

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 << Узнайте больше о Regex.

Если вы не уверены в том, будет ли число целочисленным или плавающим, просто используйте второй...

Ответ 2

Самый простой способ:

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 ", разделит номер на", "вместо" "