Валидация строковых данных почти всегда связана с предварительной нормализацией. Одной из ключевых операций выступает приведение текста к единому регистру. В веб-приложениях различие между «ABC@example.com» и «abc@example.com» может приводить к логическим ошибкам, если сравнение выполняется без учета регистронезависимости.
Валидационные процессы в Validator.js строятся на принципе предсказуемого сравнения строк, где регистр либо строго фиксируется, либо нормализуется до проверки. Это особенно важно при обработке пользовательского ввода, идентификаторов, email-адресов, логинов и кодов подтверждения.
Библиотека Validator.js предоставляет базовые инструменты для анализа регистра символов в строке:
isLowercaseisUppercaseЭти функции используются не для преобразования строки, а для проверки соответствия ожидаемому формату.
Функция isLowercase определяет, состоит ли строка
исключительно из символов нижнего регистра.
import validator from 'validator';
validator.isLowercase('hello'); // true
validator.isLowercase('Hello'); // false
validator.isLowercase('hello123'); // true
validator.isLowercase('HELLO'); // false
Особенности поведения:
Использование данной функции актуально при проверке системных идентификаторов, кодов доступа, псевдонимов, где требуется строгое соблюдение нижнего регистра.
Функция isUppercase выполняет симметричную проверку,
определяя, состоят ли буквенные символы строки исключительно из
заглавных букв.
validator.isUppercase('HELLO'); // true
validator.isUppercase('Hello'); // false
validator.isUppercase('HELLO123'); // true
validator.isUppercase('hello'); // false
Данная проверка применяется в случаях:
Функции isLowercase и isUppercase не
изменяют входные данные. Они работают исключительно как логические
предикаты. Это означает, что они не выполняют нормализацию строки, а
лишь анализируют её текущее состояние.
Существенное ограничение заключается в отсутствии учета локализаций и сложных правил Unicode-нормализации. В некоторых языках поведение регистра может быть неоднозначным, однако Validator.js ориентирован на базовые ASCII и расширенные латинские наборы.
Одним из наиболее сложных и часто встречающихся сценариев является обработка email-адресов. В стандарте RFC локальная часть email может быть чувствительной к регистру, однако на практике большинство почтовых систем рассматривают адреса как регистронезависимые.
Validator.js реализует функцию normalizeEmail, которая
включает автоматическое приведение части адреса к нижнему регистру.
validator.normalizeEmail('Example@GMAIL.com');
Результат:
example@gmail.com
Функция normalizeEmail выполняет несколько этапов
обработки:
Пример:
validator.normalizeEmail('Test.Email+tag@gmail.com');
Результат:
testemail@gmail.com
При этом происходит комбинация операций:
+tag;Функция поддерживает конфигурацию, позволяющую управлять правилами нормализации:
validator.normalizeEmail('Example@GMAIL.com', {
gmail_remove_dots: false,
gmail_remove_subaddress: false,
all_lowercase: true
});
Ключевые параметры:
all_lowercase — принудительное приведение всей строки к
нижнему регистру;gmail_remove_dots — удаление точек в Gmail-локальной
части;gmail_remove_subaddress — удаление суффиксов после
+.Эти настройки определяют степень агрессивности нормализации и позволяют адаптировать поведение под конкретные бизнес-правила.
Перед выполнением валидации часто применяется этап подготовки строки. Приведение к нижнему или верхнему регистру используется как часть цепочки нормализации:
trim);Пример композиции:
const value = ' HelloWorld '.trim().toLowerCase();
validator.isLowercase(value);
Хотя Validator.js предоставляет отдельные функции, часто регистр нормализуется средствами стандартного JavaScript, а библиотека используется для финальной проверки.
Логины и идентификаторы пользователей часто требуют унифицированного регистра. Распространенная практика — хранение всех логинов в нижнем регистре для исключения дубликатов, отличающихся только написанием.
const login = 'UserName'.toLowerCase();
validator.isAlphanumeric(login); // true
validator.isLowercase(login); // true
Такой подход снижает вероятность конфликтов при авторизации и регистрации.
Строки, содержащие одновременно верхний и нижний регистр, всегда
возвращают false при использовании строгих проверок:
validator.isLowercase('abcDEF'); // false
validator.isUppercase('abcDEF'); // false
Это свойство позволяет использовать функции как строгий фильтр на соответствие формату.
Регистровые операции в Validator.js базируются на стандартных JavaScript-механизмах сравнения символов. Однако Unicode вводит дополнительные сложности:
Validator.js не выполняет полноценную Unicode-нормализацию регистра, что делает его поведение предсказуемым только в рамках базовых алфавитов.
В реальных сценариях проверки данных операции с регистром часто комбинируются с другими методами Validator.js:
const input = ' EXAMPLE@MAIL.COM '.trim().toLowerCase();
const isEmailValid = validator.isEmail(input);
const isLower = validator.isLowercase(input.split('@')[0]);
Такой подход позволяет разделять доменную и локальную части, применяя разные правила обработки.
Обработка регистра используется в следующих типовых задачах:
Особое значение имеет этап нормализации перед сравнением строк. Без него сравнение становится чувствительным к визуальным различиям, не имеющим семантического значения.
При использовании Validator.js важно разделять два уровня обработки:
Validator.js фокусируется на первом уровне, предоставляя инструменты
анализа, а не трансформации (за исключением специализированных функций
вроде normalizeEmail).
Такое разделение позволяет строить предсказуемые цепочки обработки данных, где каждое действие имеет строго определённую роль.