Коды стран и регионов

ISO 3166 является основой для большинства механизмов работы с кодами стран и регионов в веб-приложениях. Валидация таких значений в JavaScript чаще всего выполняется с помощью библиотеки Validator.js, которая предоставляет набор специализированных функций для проверки корректности международных идентификаторов стран, регионов и территорий.

Валидация кодов стран необходима при работе с адресами пользователей, системами доставки, телефонными номерами, локализацией интерфейсов и любыми формами, где требуется унификация географических данных. Основная сложность заключается в том, что разные стандарты используют различные форматы представления одной и той же страны.


ISO 3166 определяет три основных формата кодирования стран:

ISO 3166-1 alpha-2

Двухбуквенные коды стран.

Примеры:

  • RU — Россия
  • US — США
  • DE — Германия
  • KZ — Казахстан

Этот формат наиболее часто используется в веб-разработке: доменные зоны, API геолокации, локализация.


ISO 3166-1 alpha-3

Трёхбуквенные коды стран.

Примеры:

  • RUS — Россия
  • USA — США
  • DEU — Германия
  • KAZ — Казахстан

Используется там, где требуется более читаемая идентификация страны без неоднозначностей.


ISO 3166-1 numeric

Числовые коды стран.

Примеры:

  • 643 — Россия
  • 840 — США
  • 276 — Германия
  • 398 — Казахстан

Часто применяется в статистических и финансовых системах, где текстовые коды неудобны.


Проверка кодов стран в Validator.js

Validator.js предоставляет три основные функции для работы с ISO 3166:

Проверка alpha-2 кодов

validator.isISO31661Alpha2('RU'); // true
validator.isISO31661Alpha2('RUS'); // false

Функция проверяет строго двухбуквенный формат. Входные данные должны быть в верхнем регистре, иначе результат будет отрицательным.


Проверка alpha-3 кодов

validator.isISO31661Alpha3('RUS'); // true
validator.isISO31661Alpha3('RU');  // false

Используется для трёхбуквенных кодов. Библиотека не выполняет автоматическую нормализацию регистра, поэтому входные значения должны быть стандартизированы заранее.


Проверка числовых кодов стран

validator.isISO31661Numeric('643'); // true
validator.isISO31661Numeric('084'); // false

Числовые коды должны быть представлены строкой, даже если фактически это число.


Особенности обработки входных данных

При работе с кодами стран часто возникает необходимость предварительной нормализации данных:

  • приведение к верхнему регистру;
  • удаление пробелов;
  • проверка типа входного значения;
  • преобразование чисел в строки.

Пример подготовки данных:

function normalizeCountryCode(code) {
  return String(code).trim().toUpperCase();
}

validator.isISO31661Alpha2(normalizeCountryCode(' ru ')); // true

Использование в формах и API

Валидация кодов стран чаще всего применяется в следующих сценариях:

1. Формы регистрации

if (!validator.isISO31661Alpha2(country)) {
  throw new Error('Некорректный код страны');
}

2. Проверка данных API

function validateUserPayload(payload) {
  return validator.isISO31661Alpha3(payload.countryCode);
}

3. Географическая фильтрация данных

const allowedCountries = ['RU', 'KZ', 'BY'];

if (!allowedCountries.includes(country)) {
  throw new Error('Регион не поддерживается');
}

Региональные коды и их косвенная проверка

Validator.js не предоставляет отдельного стандарта для регионов внутри стран (штатов, областей, провинций), однако такие данные часто валидируются через сопутствующие функции:

  • postal code validation с локалями
  • телефонные коды стран через isMobilePhone
  • кастомные списки регионов

Пример проверки телефонного региона:

validator.isMobilePhone('77011234567', 'kk-KZ'); // Казахстан
validator.isMobilePhone('+49 151 12345678', 'de-DE'); // Германия

Сочетание с локалями и региональными форматами

Во многих случаях код страны используется как часть локали:

  • en-US
  • ru-RU
  • de-DE
  • kk-KZ

Validator.js не валидирует локали напрямую как ISO 3166, но многие функции принимают их в качестве параметров.

Пример:

validator.isPostalCode('01001', 'DE'); // Германия
validator.isPostalCode('101000', 'RU'); // Россия

Частые ошибки при работе с кодами стран

Использование неправильного регистра

validator.isISO31661Alpha2('ru'); // false

Передача чисел вместо строк

validator.isISO31661Numeric(643); // false
validator.isISO31661Numeric('643'); // true

Использование несуществующих кодов

validator.isISO31661Alpha2('XX'); // false

Практика комбинированной валидации

В реальных проектах проверка страны часто объединяется с другими проверками:

function validateUser(data) {
  return (
    validator.isEmail(data.email) &&
    validator.isISO31661Alpha2(data.country) &&
    validator.isLength(data.username, { min: 3, max: 20 })
  );
}

Производительность и особенности реализации

Функции проверки ISO-кодов в Validator.js работают на основе заранее подготовленных списков допустимых значений. Это обеспечивает:

  • отсутствие необходимости обращения к внешним API;
  • стабильную работу без сетевых задержек;
  • предсказуемость результата.

Однако это также означает, что библиотека не учитывает динамические изменения геополитических данных и требует обновления версии для актуализации списков стран.


Кастомные расширения проверки

В некоторых системах стандартных ISO-кодов недостаточно. Тогда используется комбинация Validator.js и собственных словарей:

const supportedRegions = new Set(['RU', 'KZ', 'UZ']);

function isSupportedCountry(code) {
  return validator.isISO31661Alpha2(code) && supportedRegions.has(code);
}

Интеграция в серверные и клиентские приложения

На клиентской стороне валидация кодов стран позволяет:

  • заранее блокировать некорректный ввод;
  • адаптировать интерфейс под регион;
  • выбирать правильные маски ввода.

На серверной стороне:

  • проверяется целостность данных;
  • предотвращаются ошибки интеграции с внешними сервисами;
  • обеспечивается соответствие международным стандартам обмена данными.