0

I have 2 cases of price format and i am stuck on the regex, i cant find any solution how to solve it.

My regex to format price: /(\d)(\d{3})(\.)/g

Case 1:

var price             = '1000000.0000';
var decimals          = 2;
var thousandSeparator = ',';
var decimalSeparator  = '.';
var formatedPrice     = price.replace(/(\d)(\d{3})(\.)/g, '$1' + thousandSeparator + '$2' + decimalSeparator + '');
document.querySelector( '#case_1 span' ).innerHTML = formatedPrice;

Results: 1000,000.0000

Expected: 1,000,000.0000

Case 2:

var price             = '1000000.0000';
var decimals          = 2;
var thousandSeparator = '.';
var decimalSeparator  = ',';
var formatedPrice     = price.replace(/(\d)(\d{3})(\.)/g, '$1' + thousandSeparator + '$2' + decimalSeparator + '');
document.querySelector( '#case_2 span' ).innerHTML = formatedPrice;

Results: 1000.000,0000

Expected: 1.000.000,0000

JsFiddle: https://jsfiddle.net/cpan2s6d/


Is it possible to achieve only using regex?

Thanks

JosephMurphy
  • 53
  • 1
  • 6
  • @Tim Biegeleisen, i already tried that. Didn't worked for me – JosephMurphy Apr 30 '19 at 10:46
  • Try looking at the [`Intl.NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) api, it might allow you to do what you want without regex – Sean Apr 30 '19 at 10:48

1 Answers1

1

Try this:

First replace all dots with your decimalseparator. Then group the thousands.

price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

Code:

var price = '1000000.00';
var decimals = 2;
var thousandSeparator = ',';
var decimalSeparator = '.';
var formatedPrice = price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

document.querySelector('#case_1 span').innerHTML = formatedPrice;

var price = '1000000.00';
var decimals = 2;
var thousandSeparator = '.';
var decimalSeparator = ',';
var formatedPrice = price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

document.querySelector('#case_2 span').innerHTML = formatedPrice
  <div id="case_1">Case 1: <span></span></div>
  <div id="case_2">Case 2: <span></span></div>
alexP
  • 3,672
  • 7
  • 27
  • 36