UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

56 lines 2.09 kB
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