Парсинг в Globalize основан на данных CLDR (Unicode Common Locale Data Repository), где определяются правила интерпретации строковых представлений чисел, дат и валют для конкретной локали. В отличие от универсальных парсеров, поведение строго зависит от локализационных правил: формат десятичного разделителя, порядок группировки разрядов, символы валют, форматы дат и времени.
Ключевая особенность заключается в том, что корректность результата
определяется не только входной строкой, но и полнотой подключённых
CLDR-данных. При отсутствии необходимых данных результат парсинга может
становиться null или сопровождаться ошибкой выполнения.
Ошибки в процессе преобразования строк в значения можно разделить на несколько категорий:
1. Ошибки формата
2. Ошибки локали
3. Ошибки преобразования
4. Логические ошибки
Globalize не всегда генерирует исключения в классическом смысле. В
большинстве API используется возвращаемое значение null или
NaN, однако при некорректной конфигурации возможны ошибки
на уровне выполнения JavaScript.
Типовой подход к обработке:
try {
const number = Globalize("en").numberParser()(input);
if (isNaN(number)) {
throw new Error("Invalid number format");
}
} catch (e) {
// обработка ошибки парсинга
}
Важная особенность заключается в том, что проверка результата должна выполняться явно, поскольку отсутствие исключения не гарантирует корректный результат.
Парсинг в Globalize может быть условно разделён на два режима поведения:
Нестрогий режим
Строгий режим
Пример различий:
const parser = Globalize("de").numberParser();
// нестрогий ввод
parser("1.234,5 EUR"); // может быть интерпретировано
// строгая проверка через предварительную валидацию
const pattern = Globalize("de").numberFormatter();
Строгий режим обычно реализуется через дополнительную валидацию формата перед парсингом.
Парсинг чисел наиболее чувствителен к локали из-за различий в форматировании:
Типичные ошибки:
const parser = Globalize("fr").numberParser();
parser("1,23,4"); // некорректная группировка
parser("12 34,56"); // неправильная структура групп
parser("12.34"); // неоднозначный формат для локали fr
При работе с числами важно учитывать:
Парсинг дат в Globalize зависит от локализованных шаблонов
CLDR calendar.
Основные источники ошибок:
Пример:
const parser = Globalize("en").dateParser();
parser("31/12/2025"); // ошибка для en (ожидается MM/DD/YYYY)
parser("2025-13-01"); // невозможный месяц
Особое внимание требуется при работе с неоднозначными форматами:
01/02/2025 может интерпретироваться по-разномуДля минимизации ошибок применяется явное указание шаблона через CLDR skeletons.
Парсинг валют включает дополнительные уровни сложности:
Пример проблемных случаев:
const parser = Globalize("en").currencyParser("USD");
parser("$1,234.56");
parser("1.234,56 $"); // для другой локали
parser("USD 100"); // зависит от настроек парсера
Частая проблема — несоответствие между кодом валюты и локалью, что приводит к некорректной интерпретации значения.
Критический источник ошибок — неполная загрузка CLDR:
main,
supplementalGlobalize.loadПоследствия:
NaNundefinedПример корректной инициализации:
Globalize.load(
require("cldr-data/main/en/numbers"),
require("cldr-data/supplemental/likelySubtags")
);
Без этих данных поведение парсера становится непредсказуемым.
Работа с парсингом требует многоуровневой проверки результата:
NaN, null)Пример устойчивой обработки:
function safeParseNumber(globalize, value) {
const parser = globalize.numberParser();
const result = parser(value);
if (typeof result !== "number" || isNaN(result)) {
return null;
}
return result;
}
Дополнительно применяется нормализация входных данных:
В прикладных системах используются устойчивые шаблоны обработки:
Паттерн предварительной нормализации
Паттерн двойной проверки
Паттерн fallback локали
en при ошибкеfunction parseWithFallback(globalize, value) {
let result = globalize.numberParser()(value);
if (isNaN(result)) {
result = Globalize("en").numberParser()(value);
}
return isNaN(result) ? null : result;
}
Паттерн строгой валидации
Такие подходы позволяют минимизировать влияние некорректных входных данных и нестабильности локализационных правил.