Валидация чисел в контексте Globalize опирается на правила CLDR (Unicode Common Locale Data Repository), где формат чисел определяется локалью: разделители тысяч, десятичные символы, особенности группировки и допустимые символы.
Основной инструмент — разбор строки в число через
Globalize.parseNumber. Поведение функции напрямую связано с
текущей локалью и набором подключённых CLDR-данных.
Globalize.locale("en");
Globalize.parseNumber("1,234.56"); // 1234.56
Globalize.parseNumber("1.234,56"); // NaN в en
При некорректном формате результатом становится NaN, что
используется как базовый индикатор невалидного ввода.
Валидация числовых строк обычно строится вокруг проверки результата парсинга:
const value = Globalize.parseNumber(input);
const isValid = typeof value === "number" && !isNaN(value);
Такая модель позволяет отделять корректные значения от строк, не соответствующих локальному формату.
Различия между локалями влияют на допустимый формат:
en: десятичный разделитель ., группировка
,de: десятичный разделитель ,, группировка
.fr: пробелы как разделители группGlobalize.locale("de");
Globalize.parseNumber("1.234,56"); // 1234.56
Globalize.parseNumber("1,234.56"); // NaN
Несоответствие формату локали приводит к неуспешному разбору даже при «логически правильном» числе.
Работа с валютой в Globalize строится через парсинг числового значения, очищенного от символов валюты и локальных особенностей оформления.
Валидация валютного ввода обычно выполняется через
parseNumber, поскольку символ валюты не является частью
числового значения.
Globalize.locale("en");
Globalize.parseNumber("$1,200.00"); // 1200
Globalize.parseNumber("€1,200.00"); // NaN без предварительной обработки
Перед парсингом часто требуется нормализация строки:
function normalizeCurrency(input) {
return input.replace(/[^\d.,-]/g, "");
}
const normalized = normalizeCurrency("$1,200.00");
Globalize.parseNumber(normalized); // 1200
Подобная схема позволяет отделить формат отображения от логики проверки.
Процентные значения в Globalize не имеют отдельного строгого типа в
парсинге, поэтому валидация строится на обработке строки и интерпретации
символа %.
function parsePercent(input) {
const cleaned = input.replace("%", "");
const value = Globalize.parseNumber(cleaned);
return value;
}
parsePercent("45%"); // 45
Дополнительная проверка корректности включает ограничение диапазона значений:
const isValidPercent =
value >= 0 && value <= 100 && !isNaN(value);
Globalize предоставляет parseDate, который
интерпретирует строку согласно локальному формату дат.
Globalize.locale("en");
Globalize.parseDate("12/31/2025"); // Date object
Globalize.parseDate("31/12/2025"); // null или Invalid Date
Некорректные строки возвращают null или объект
Date, который не проходит проверку через
isNaN(date.getTime()).
const date = Globalize.parseDate(input);
const isValidDate =
date instanceof Date && !isNaN(date.getTime());
Разные локали изменяют порядок компонентов:
en-US: MM/DD/YYYYde-DE: DD.MM.YYYYja-JP: YYYY/MM/DDGlobalize.locale("de-DE");
Globalize.parseDate("31.12.2025"); // корректно
Globalize.parseDate("12/31/2025"); // некорректно
Валидация в Globalize не имеет единого режима «strict», однако строгая логика формируется на уровне приложения.
Допускает предварительную очистку строки:
Globalize.parseNumber(" 1,234.50 ");
Поддерживаются пробелы и частичные отклонения формата.
Строгость достигается дополнительными проверками:
const parsed = Globalize.parseNumber(input);
const formatted = Globalize.formatNumber(parsed);
const isStrict =
parsed != null &&
formatted === input;
Одним из устойчивых подходов является проверка «обратимости»:
const number = Globalize.parseNumber(input);
const normalized = Globalize.formatNumber(number);
const isValid = normalized === input;
Этот подход позволяет выявлять:
Ограничение метода связано с тем, что форматирование может отличаться от исходного ввода (например, пробелы или альтернативные представления).
Основной индикатор невалидного числового ввода —
NaN.
const value = Globalize.parseNumber(input);
if (isNaN(value)) {
// ошибка валидации
}
Для дат аналогом выступает Invalid Date.
const date = Globalize.parseDate(input);
if (!date || isNaN(date.getTime())) {
// ошибка валидации даты
}
В некоторых сценариях требуется обработка сложных строк, содержащих несколько значений:
function validateNumberList(input) {
return input.split(",").every((part) => {
const value = Globalize.parseNumber(part.trim());
return !isNaN(value);
});
}
При обработке CSV-подобных структур локаль влияет на интерпретацию десятичного разделителя, что требует явного контроля разделения колонок до парсинга.
Корректность всех операций парсинга определяется полнотой CLDR-ресурсов:
Отсутствие или неполная загрузка CLDR приводит к деградации валидации: часть строк перестаёт корректно распознаваться даже при правильном синтаксисе.
Практика работы с Globalize предполагает предварительную нормализацию входных данных:
function normalize(input) {
return input
.replace(/\u00A0/g, " ")
.trim();
}
Нормализация снижает количество ложных ошибок парсинга.
В интерфейсных сценариях часто применяется универсальный валидатор:
function validate(input) {
const number = Globalize.parseNumber(input);
if (!isNaN(number)) return { type: "number", value: number };
const date = Globalize.parseDate(input);
if (date && !isNaN(date.getTime())) {
return { type: "date", value: date };
}
return { type: "invalid", value: null };
}
Такая модель опирается на приоритет числового разбора и последующую проверку дат.
1,234.56 в немецкой
локали)NaNКаждая из ошибок приводит к ложноположительным или ложноотрицательным результатам проверки, особенно в многоязычных интерфейсах.