Как проверить символы в строке на корректность в 1С?

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

При разработке конфигураций и форм ввода часто возникает задача проверки корректности введенных данных, таких как номера телефонов, артикулы, серии документов или коды контрактов. Главная цель такой проверки — убедиться, что строка содержит только цифры или строго определенный набор разрешенных символов (например, знак + в начале телефонного номера).

Рассмотрим несколько эффективных способов решения этой задачи в 1С: от посимвольной обработки до использования стандартных функций Библиотеки стандартных подсистем (БСП).

Способ 1. Проверка символов через поиск в строке допустимых значений

Наиболее наглядный и гибкий метод посимвольной проверки заключается в формировании строки с разрешенными символами и последующем обходе проверяемого текста в цикле с использованием функции СтрНайти (или Найти в старых версиях платформ).

Разберем по шагам, как реализовать такой алгоритм:

  1. Определим переменную со списком всех допустимых символов (например, "0123456789").
  2. Организуем цикл от 1 до длины проверяемой строки с помощью функции СтрДлина.
  3. С помощью функции Сред извлечем текущий символ и проверим его наличие в строке допустимых символов.

Посмотрим на пример кода:


ДопустимыеСимволы = "0123456789";
Корректно = Истина;

Для Сч = 1 По СтрДлина(ПолеПроверки) Цикл
    Символ = Сред(ПолеПроверки, Сч, 1);
    Если СтрНайти(ДопустимыеСимволы, Символ) = 0 Тогда
        Корректно = Ложь;
        Прервать;
    КонецЕсли;
КонецЦикла;

Если НЕ Корректно Тогда
    Сообщить("Обнаружены недопустимые символы! Строка должна содержать только цифры.");
КонецЕсли;

Способ 2. Сравнение символов по диапазону значений

В платформе 1С строки можно сравнивать так же, как и числа. Символы лежат в стандартной кодировке, поэтому для проверки того, является ли символ цифрой, достаточно сравнить его с границами "0" и "9".

Важно: При сравнении строк значения обязательно должны быть заключены в кавычки, чтобы платформа 1С сравнивала их именно как строковые типы данных, а не числа.

Проанализируем пример проверки, учитывающий специальный символ + на первой позиции (например, для международных номеров телефонов):


ДлинаСтроки = СтрДлина(Поле1);
СтрокаКорректна = Истина;

Для Сч = 1 По ДлинаСтроки Цикл
    ТекСимвол = Сред(Поле1, Сч, 1);
    
    // Первый символ может быть плюсом или цифрой
    Если Сч = 1 И ТекСимвол = "+" Тогда
        Продолжить;
    КонецЕсли;
    
    // Проверяем, входит ли символ в диапазон от "0" до "9"
    Если НЕ (ТекСимвол >= "0" И ТекСимвол <= "9") Тогда
        СтрокаКорректна = Ложь;
        Прервать;
    КонецЕсли;
КонецЦикла;

Если НЕ СтрокаКорректна Тогда
    Сообщить("Поле должно содержать номер формата +7XXXXXXXXXX или только цифры!");
КонецЕсли;

Способ 3. Очистка строки через СтрЗаменить

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

Рассмотрим пример этого подхода:


ПроверочнаяСтрока = Поле1;

// Если допустим плюс в начале, уберем его
Если СтрНачинаетсяС(ПроверочнаяСтрока, "+") Тогда
    ПроверочнаяСтрока = Сред(ПроверочнаяСтрока, 2);
КонецЕсли;

// Убираем все цифры
Для Цифра = 0 По 9 Цикл
    ПроверочнаяСтрока = СтрЗаменить(ПроверочнаяСтрока, Строка(Цифра), "");
КонецЦикла;

// Если что-то осталось, значит были сторонние символы
Если СтрДлина(ПроверочнаяСтрока) > 0 Тогда
    Сообщить("Введены недопустимые символы: " + ПроверочнаяСтрока);
КонецЕсли;

Способ 4. Использование готовых функций БСП

Если ваша конфигурация разработана на базе Библиотеки стандартных подсистем (БСП), вам не нужно писать собственные циклы проверки. В типовых решениях уже есть готовые клиенто-серверные функции.

Для проверки на наличие только цифр подходит функция:


ТолькоЦифры = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Поле1, Истина);
Если НЕ ТолькоЦифры Тогда
    Сообщить("Строка должна состоять исключительно из цифр!");
КонецЕсли;

Для полноценной работы с номерами телефонов в БСП предусмотрена подсистема УправлениеКонтактнойИнформацией, которая умеет автоматически валидировать и разлагать номер на код страны, код города и основной номер.

Ограничения использования маски ввода на форме

Интерактивно ограничить ввод пользователя можно через свойство Маска у элемента формы (например, задав значение +7 999 999 99 99). Однако важно помнить о следующих нюансах:

  1. Маска формы действует только при ручном вводе значения пользователем в интерфейсе.
  2. При программном заполнении реквизита или при вставке данных из внешних файлов/систем маска на форме не выполняет валидацию. Поэтому программную проверку в коде необходимо сохранять всегда.
← На главную