Код Junior Базовые типы обновлено

Разбор суммы из формы: Result с кодами ошибок

Условие

Пользователь вводит сумму в рублях: 1 234,50, 1234.5, 99. Напиши parseAmount(input: string): ParseResult, где type ParseResult = { ok: true; kopecks: number } | { ok: false; error: 'empty' | 'format' | 'negative' | 'too_large' }.

Правила: пробелы (в том числе неразрывные \u00A0) внутри и по краям убираются; разделитель дробной части запятая или точка; не больше 2 знаков после разделителя; минус в начале даёт negative; больше 1 000 000 рублей too_large; пусто empty; всё остальное format.

Примеры

parseAmount("1 234,50") // {"ok":true,"kopecks":123450}
parseAmount("1234.5") // {"ok":true,"kopecks":123450}
parseAmount("  99 ") // {"ok":true,"kopecks":9900}

Как подойти

Подсказки: 2
  1. Сначала нормализуй строку, потом одна регулярка на формат.
  2. Не считай через parseFloat(...) * 100: 1.15 * 100 это 114.99999999999999.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.