Форматування чисел після крапки в мультивалідних формах

Бувать такі форми, особливо в фінансових проектах, коли вам треба обробляти всі сценії. Що саме, якщо користувач вставить в поле суму з пробілами (1 000 000), з крапкою (100.20), з крапкою і комами (1,235,321.23), просто з комою (1000,25), і тому подібні випадки. В фін компаніях це обов'язкове правило

Також в багатьох випадках потрібно вказувати точну ціну, разом з числами після крапки, навіть якщо вони .00. Мені трапилася така задача на днях в одній фін компанії, тому щоб ви не ломали мізок, я вирішив поділитися обробкою такого сценарія. 

const amountToString = value => {

    if (!value || value === null || value === undefined) return "0.00";
    let s = String(value).trim();
    if (typeof value === 'number' && Number.isFinite(value)) s = value.toString();
    s = s.replace(/[ \u00A0\u202F]/g, '');

    const lastComma = s.lastIndexOf(',');
    const lastDot = s.lastIndexOf('.');

    if (lastComma !== -1 && lastDot !== -1) {
      const useCommaAsDecimal = lastComma > lastDot;
      if (useCommaAsDecimal) {
        s = s.replace(/\./g, '');
        s = s.substring(0, lastComma).replace(/,/g, '') + '.' + s.substring(lastComma + 1);
      } else {
        s = s.replace(/,/g, '');
      }
    } else if (lastComma !== -1 && lastDot === -1) {
      s = s.replace(/,/g, '.');
    } else {
      s = s.replace(/,/g, '');
    }

    if (!s.includes('.')) return s + '.00';
    if (s.startsWith('.')) s = '0' + s;
    if (s.endsWith('.')) return s + '00';

    const [intPart, fracPart] = s.split('.');
    if (typeof fracPart === 'undefined' || fracPart.length === 0) return intPart + '.00';
    if (fracPart.length === 1) return intPart + '.' + fracPart + '0';
    return intPart + '.' + fracPart;
  }