Как правильно реализовать валидацию номера телефона в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто перед разработчиками 1С встает задача переноса логики проверки данных, написанной на JavaScript, непосредственно в среду 1С. В данной статье мы разберем, как эффективно проверить корректность введенного пользователем номера телефона, используя инструменты платформы 1С.

Метод 1: Использование регулярных выражений

Начиная с версии платформы 8.3.23, в языке 1С появилась встроенная поддержка регулярных выражений. Это самый «чистый» и современный способ, который позволяет перенести логику из JS почти без изменений.

Разберем пример реализации такой проверки:


// Пример использования регулярного выражения для проверки номера
Перем СтрокаДляПроверки, Регулярка, Результат;

СтрокаДляПроверки = "+7(999)000-00-00"; 
Регулярка = "^[\d\+][\d\(\)\ -]{4,14}\d$";

Результат = СтрПодобнаПоРегулярномуВыражению(СтрокаДляПроверки, Регулярка);

Если Результат Тогда
    Сообщить("Номер телефона введен правильно!");
Иначе
    Сообщить("Ошибка: формат номера не соответствует шаблону!");
КонецЕсли;

Обратите внимание, что метод СтрПодобнаПоРегулярномуВыражению возвращает логическое значение Истина или Ложь. Это прямой аналог метода test() из JavaScript.

Метод 2: Посимвольный анализ строки (без использования регулярных выражений)

Если вы работаете на версии платформы ниже 8.3.23, либо хотите минимизировать зависимости от сложных движков, мы можем реализовать алгоритм посимвольной проверки. Этот способ требует больше кода, но он универсален и работает на любом релизе платформы.

Давайте проанализируем логику такой проверки по шагам:

  1. Проверяем, не пуста ли строка.
  2. Проверяем первый символ: это должна быть цифра или знак «плюс».
  3. Проверяем последний символ: это обязательно должна быть цифра.
  4. Проходим циклом по всей остальной части строки и проверяем, чтобы каждый символ входил в допустимый набор (цифры, пробел, дефис, скобки).

Пример программной реализации:


Функция ВалидныйТелефон(Телефон)
    Перем valid, firstChar, lastChar, i;
    valid = Ложь;
    
    Если НЕ ПустаяСтрока(Телефон) Тогда
        firstChar = Сред(Телефон, 1, 1);
        lastChar = Сред(Телефон, СтрДлина(Телефон), 1);
        
        Если (СтрНайти("0123456789", firstChar) > 0 ИЛИ firstChar = "+") 
             И СтрНайти("0123456789", lastChar) > 0 Тогда
            
            valid = Истина;
            Для i = 2 По (СтрДлина(Телефон) - 1) Цикл
                Если НЕ (СтрНайти("0123456789()- ", Сред(Телефон, i, 1)) > 0) Тогда
                    valid = Ложь;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    
    Возврат valid;
КонецФункции

Что еще важно учитывать при разработке?

Помимо программной проверки, не забывайте о возможностях интерфейса 1С:

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

← На главную