toLocaleNumber()

Convert string to its numeric form and handle most locales

by Stéphane Hamel

JavaScript

String.prototype.toLocaleNumber = function(x) {
  var comma = this.indexOf(','),
    period = this.indexOf('.'),
    percent = ~this.indexOf('%'),
    s = this.replace(/[^\d\-\.\,]/g, '');
  if (comma !== -1 && comma < period) s = s.replace(/,/g, '');
  if (period !== -1 && comma !== -1 && period <  comma) s = s.replace(/\./g, '').replace(/,/, '.');
  s = s.replace(',', '.');
  if (percent) return parseFloat(s) / 100;
  else return parseFloat(s);
};


console.info('Canadian (English and French) 4 294 967 295,123', '4 294 967 295,123'.toLocaleNumber());
console.info('Danish 4 294 967 295,123', '4 294 967 295,123'.toLocaleNumber());
console.info('Finnish 4 294 967 295,123', '4 294 967 295,123'.toLocaleNumber());
console.info('French 4 294 967 295,123', '4 294 967 295,123'.toLocaleNumber());
console.info('German 4 294 967.295,123', '4 294 967.295,123'.toLocaleNumber());
console.info('Italian 4.294.967.295,123', '4.294.967.295,123'.toLocaleNumber());
console.info('Norwegian 4.294.967.295,123', '4.294.967.295,123'.toLocaleNumber());
console.info('Spanish 4.294.967.295,123', '4.294.967.295,123'.toLocaleNumber());
console.info('Swedish 4 294 967 295,123', '4 294 967 295,123'.toLocaleNumber());
console.info('GB-English 4,294,967,295.123', '4,294,967,295.123'.toLocaleNumber());
console.info('US-English 4,294,967,295.123', '4,294,967,295.123'.toLocaleNumber());
console.info('Thai 4,294,967,295.123', '4,294,967,295.123'.toLocaleNumber());
console.info('Percentage', '98%'.toLocaleNumber());
console.info('Small Percentage', '12.32%'.toLocaleNumber());
console.info('Big Percentage', '1,238.02 %'.toLocaleNumber());