[JS + регулярка] Разделить числа в тексте пробелами по разрядам

Содержание

Админу на хлеб с маслом - 50 руб.
Требовалось найти решение по разделению числа пробелами на разряды.

JS + регулярное выражение №1


num = 123456789;
str = '' + num;
result = str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ");

console.log(result); // 123 456 789

JS + регулярка №2


function numberWithSpaces(x) {
  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
console.log(numberWithSpaces(1));           // 1
console.log(numberWithSpaces(100));         // 100
console.log(numberWithSpaces(10000));       // 10 000
console.log(numberWithSpaces(1000000));     // 1 000 000
console.log(numberWithSpaces(100000000));   // 100 000 000

Для значений с плавающей точкой


function numberWithSpaces(x) {
  var parts = x.toString().split(".");
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, " ");
  return parts.join(".");
}
console.log(numberWithSpaces(1.05));
console.log(numberWithSpaces(100.05));
console.log(numberWithSpaces(10000.05));
console.log(numberWithSpaces(1000000.05));
console.log(numberWithSpaces(100000000.05));

только JS

Более лаконичное элегантное решение с применением функции конвертации в строку - toLocaleString

Решение актуально и для чисел с плавающей точкой.

Однако, при выводе результата точка заменится запятой.


var num = 123456789;
var result = num.toLocaleString();

console.log(result); // 123 456 789

// с плавающей точкой
var num = 123456789.123;
var result = num.toLocaleString();

console.log(result); // 123 456 789,123