@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
56 lines • 2.09 kB
JavaScript
import { escapeRegexChars } from "../../../shared/component-helper.js";
import { NUMBER_CHARS } from "./constants.js";
export function cleanNumber(num, {
decimalSeparator = null,
thousandsSeparator = null,
prefix = null,
suffix = null
} = {}) {
if (typeof num === 'number' || typeof num === 'undefined' || num === null) {
return num;
}
num = String(num).trim();
if (typeof prefix === 'string' && num.startsWith(prefix)) {
num = num.substring(prefix.length, num.length);
}
if (typeof suffix === 'string' && num.endsWith(suffix)) {
num = num.substring(0, num.length - suffix.length);
}
if (/^[^0-9-]/.test(num)) {
num = num.replace(/^(^[^0-9-]+)/, '');
}
let decimal = decimalSeparator;
let thousands = thousandsSeparator;
if (/(\s)([0-9]{3})/.test(num)) {
thousands = thousands || '\\s';
decimal = decimal || ',';
} else if (/(\.)([0-9]{3})/.test(num) && !/([,'][0-9]{3})(\.)([0-9]{3})/.test(num)) {
thousands = thousands || '\\.';
decimal = decimal || ",|·|'";
} else if (/(,)([0-9]{3})/.test(num)) {
thousands = thousands || ',';
decimal = decimal || '\\.|·';
} else if (/(')([0-9]{3})/.test(num)) {
thousands = thousands || "'";
decimal = decimal || '\\.|,';
} else {
thousands = ',';
decimal = '\\.';
}
const thousandReg = thousandsSeparator ? new RegExp(`([0-9]|)(${escapeRegexChars(thousandsSeparator)})([0-9]{3})`, 'g') : new RegExp(`([0-9]|)(${thousands})([0-9]{3})`, 'g');
if (thousandReg.test(num)) {
num = num.replace(thousandReg, '$1$3');
}
const decimalReg = decimalSeparator ? new RegExp(`(${escapeRegexChars(decimalSeparator)})([0-9]{0,})`, 'g') : new RegExp(`(${decimal})([0-9]{1,2})`, 'g');
if (decimalReg.test(num)) {
num = num.replace(decimalReg, '.$2');
}
if (!decimalSeparator) {
const decimalBackup = new RegExp(`(${decimal})([0-9]{3,})`, 'g');
if (decimalBackup.test(num)) {
num = num.replace(decimalBackup, '.$2');
}
}
return num.replace(new RegExp(`([^${NUMBER_CHARS}])`, 'g'), '');
}
//# sourceMappingURL=cleanNumber.js.map