Как проверить, содержит ли строка буквы или другие нецифровые символы в 1С?

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

При разработке конфигураций на платформе 1С часто возникает задача валидации пользовательского ввода или анализа кодов. Например, нужно убедиться, что строка состоит только из цифр, или, наоборот, выявить наличие букв. Давайте вместе разберем наиболее эффективные и надежные способы реализации такой проверки.

Способ 1: Посимвольный перебор

Это классический и самый наглядный метод. Мы проходим по каждому символу строки и проверяем, входит ли он в допустимый набор (цифры от 0 до 9). Если встречается символ, отсутствующий в этом списке, значит, строка содержит буквы или спецсимволы.


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

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

Способ 2: Использование метода СтрРазделить

Более изящный вариант, который позволяет избежать использования циклов в явном виде. Мы пытаемся разделить строку, используя все цифры как разделители. Если после этого в массиве остались элементы, значит, в строке присутствовали символы, отличные от цифр.


// Если количество элементов больше 0, значит есть нецифровые символы
ЕстьНеЦифры = СтрРазделить(СтрокаПроверки, "0123456789", Ложь).Количество() > 0;

Этот метод работает быстрее и выглядит в коде значительно чище.

Способ 3: Очистка строки от цифр

Рассмотрим интересный прием: мы последовательно заменяем все цифры в строке на пустые значения. Если после всех манипуляций длина результирующей строки стала равна нулю, значит, исходная строка состояла только из цифр.


Значение = "00А1";
ЧистаяСтрока = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(
              СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(
              Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), 
              "5", ""), "6", ""), "7", ""), "8", ""), "9", "");
Если СтрДлина(ЧистаяСтрока) > 0 Тогда
    // В строке есть буквы или спецсимволы
КонецЕсли;

Способ 4: Использование механизмов запросов

Если задача стоит в рамках серверной обработки, можно воспользоваться языком запросов с использованием оператора ПОДОБНО. Это очень мощный инструмент для работы с регулярными выражениями (шаблонами) прямо внутри 1С.


ВЫБРАТЬ
    &Строка КАК ПроверяемаяСтрока
ГДЕ
    &Строка ПОДОБНО "%[^0-9]%"

Шаблон %[^0-9]% означает, что мы ищем любой символ, который не является цифрой в диапазоне от 0 до 9.

Современные подходы и рекомендации

Помимо перечисленных методов, стоит учитывать следующее:

  1. Платформенные возможности: Начиная с версии 1С:Предприятие 8.3.23, появились встроенные функции для работы с регулярными выражениями, что делает код еще более кратким и производительным.
  2. Технология 1С:Элемент: Если вы переходите на эту технологию, используйте встроенные методы типов, такие как ТолькоЦифры(), которые позволяют решить задачу одной командой.
  3. Проверка кодов символов: Для высоконагруженных систем, где важна скорость, используйте метод КодСимвола(). Проверка попадания кода символа в диапазон [48, 57] выполняется процессором практически мгновенно.

Важное предостережение: Избегайте использования конструкции Число(Строка) с последующей обработкой исключений в блоке Попытка...Исключение. Хотя это кажется простым решением, такой подход замедляет работу программы и является плохим тоном в профессиональной разработке на 1С.

Выбирайте метод исходя из того, где именно выполняется код (клиент или сервер) и насколько критична производительность в вашем конкретном случае!

← На главную