Untitled

 avatar
unknown
plain_text
4 months ago
1.7 kB
3
Indexable
export const getCurrencyFormat = (currency: string) => {
  switch (currency) {
    case 'USD':
      return {
        prefix: '$ ',
        decimalSeparator: '.',
        thousandSeparator: ',',
        allowNegative: false,
      };
    case 'EUR':
      return {
        prefix: '€ ',
        decimalSeparator: ',',
        thousandSeparator: '.',
        allowNegative: false,
      };
    case 'BRL':
      return {
        prefix: 'R$ ',
        decimalSeparator: ',',
        thousandSeparator: '.',
        allowNegative: false,
      };
    case 'GBP':
      return {
        prefix: '£ ',
        decimalSeparator: '.',
        thousandSeparator: ',',
        allowNegative: false,
      };
    default:
      return {
        prefix: '$ ',
        decimalSeparator: '.',
        thousandSeparator: ',',
        allowNegative: false,
      };
  }
};

export const cleanAmount = (amount: string, currency: string): number => {
  const { decimalSeparator, thousandSeparator, prefix } = getCurrencyFormat(currency);

  if (!amount) return 0;

  let cleanAmount = amount.trim();

  // Remove o prefixo da moeda (ex: "R$ ")
  if (cleanAmount.startsWith(prefix)) {
    cleanAmount = cleanAmount.substring(prefix.length).trim();
  }

  // Remove espaços extras
  cleanAmount = cleanAmount.replace(/\s/g, '');

  // Remove os separadores de milhar
  if (thousandSeparator) {
    cleanAmount = cleanAmount.replace(new RegExp(`\\${thousandSeparator}`, 'g'), '');
  }

  // Substitui o separador decimal pelo padrão internacional (ponto)
  if (decimalSeparator) {
    cleanAmount = cleanAmount.replace(decimalSeparator, '.');
  }

  return parseFloat(cleanAmount) || 0;
};
Editor is loading...
Leave a Comment