Форматированная строка в AutoNumeric представляет собой числовое значение, преобразованное в человекочитаемый вид с применением разделителей тысяч, символов валюты, фиксированного количества знаков после запятой и других правил отображения. В отличие от «сырого» числового значения, такая строка перестаёт быть напрямую пригодной для математических операций и требует обратного преобразования перед использованием в бизнес-логике.
Валидация форматированной строки в этом контексте означает проверку её соответствия набору правил, заданных конфигурацией экземпляра AutoNumeric. Основная сложность заключается в том, что одна и та же строка может быть корректной в одной локали и некорректной в другой, а также может содержать допустимые визуальные элементы, которые недопустимы в числовом представлении.
Ключевая особенность AutoNumeric заключается в том, что он разделяет:
Валидация всегда находится на границе этих двух представлений.
Форматированная строка в AutoNumeric строится на основе набора параметров конфигурации:
decimalCharacter — символ разделителя дробной
частиdigitGroupSeparator — разделитель групп разрядовcurrencySymbol — символ валюты (если используется)currencySymbolPlacement — позиция символа валютыdecimalPlaces — фиксированное количество знаков после
запятойnegativePositiveSignPlacement — положение знака
минус/плюсshowOnlyNumbersOnFocus — изменение отображения при
фокусеКаждый из этих параметров влияет на допустимый формат строки. Следовательно, валидация не может быть универсальной без контекста конфигурации.
Пример:
1 234,56 €
и
€1,234.56
— это разные строки, каждая валидна только при соответствующей конфигурации.
В AutoNumeric нет единственного «валидатора» в классическом смысле, как в формах или схемах JSON. Вместо этого используется принцип обратного преобразования:
Если строка не может быть преобразована в допустимое число, она считается невалидной.
Этот процесс реализуется через внутренние механизмы, аналогичные
методу unformat или getNumber.
Одним из базовых способов валидации является попытка преобразования строки в числовое значение.
Логика выглядит следующим образом:
Если результат:
NaNnullundefinedстрока считается некорректной.
Типичный подход:
const numericValue = autoNumericInstance.getNumber(formattedString);
if (isNaN(numericValue)) {
// строка невалидна
}
Валидация здесь опирается не на шаблон, а на результат интерпретации.
AutoNumeric строго соблюдает ограничения конфигурации, и любое отклонение делает строку потенциально невалидной.
Строка:
1,234.56
будет невалидной при конфигурации:
digitGroupSeparator = ' '
decimalCharacter = ','
ожидаемый формат:
1 234,56
Даже если математически число корректно, строка не проходит валидацию из-за несовпадения формата.
Одна из самых частых причин невалидности — использование неправильного символа дробной части.
Например:
1234.56
невалидно при:
decimalCharacter = ','
Если символ валюты не ожидается конфигурацией, строка считается некорректной даже при правильном числе.
$1,234.56
может быть невалидной, если currencySymbol = '€'.
Некоторые конфигурации требуют строго фиксированного положения минуса:
-1 234,56
или
1 234,56-
Несоответствие расположения знака приводит к невозможности корректного разбора.
AutoNumeric выполняет валидацию в реальном времени, а не только при финальной проверке. Это означает, что строка может быть временно «невалидной» в процессе ввода, но допустимой в конечном состоянии.
Пример:
11,1,21,23Промежуточное состояние может не соответствовать строгому числовому формату, но система позволяет его до завершения ввода.
Это вводит важное понятие:
валидность состояния ≠ валидность финальной строки
В контексте AutoNumeric можно выделить два подхода к проверке строк:
Применяется при финальной проверке формы или перед отправкой данных.
Характеризуется:
Используется через извлечение числового значения и его проверку.
Применяется в процессе ввода:
Форматированная строка считается невалидной не только из-за синтаксиса, но и из-за нарушения числовых ограничений.
AutoNumeric поддерживает ограничения:
minimumValuemaximumValueПосле преобразования строки выполняется проверка:
min <= value <= max
Пример:
formatted: "999 999,99"
max: 100 000
строка синтаксически корректна, но логически невалидна.
Форматированная строка может содержать:
Валидация включает этап нормализации:
Если после нормализации строка не распознаётся как число — она считается ошибочной.
Хотя AutoNumeric не полагается исключительно на регулярные выражения, они часто используются на внешнем уровне для предварительной фильтрации.
Типичный паттерн включает:
0-9Однако регулярное выражение не способно полностью заменить внутренний парсер, так как:
Поэтому regex используется только как первый слой защиты.
Пустая строка может трактоваться как:
000123,45
может быть:
1,,234.56
всегда невалидно, так как нарушает структуру числа.
Если строка подготовлена под одну локаль, а парсится в другой, результат становится некорректным даже при визуальной правильности.
Каждый экземпляр AutoNumeric хранит внутреннее состояние, включающее:
Это позволяет выполнять проверку без внешнего анализа строки:
autoNumericInstance.getNumericString();
autoNumericInstance.getNumber();
Если экземпляр не может корректно интерпретировать текущее значение, он возвращает нечисловой результат.
Перед тем как строка считается валидной или нет, она проходит нормализацию:
Без нормализации невозможно корректно определить валидность, так как один и тот же визуальный символ может иметь разные Unicode-представления.
Валидация форматированной строки в AutoNumeric фактически сводится к трёхэтапной модели:
Синтаксический анализ
Семантический анализ
Ограничительная проверка
Только прохождение всех трёх уровней означает полную валидность строки в контексте библиотеки.