Регулярные выражения в 1С

Как использовать регулярные выражения (RegExp) в 1С для валидации, поиска и замены текста.

📋 Зачем нужны регулярные выражения

  • Проверка формата email, телефона, ИНН
  • Извлечение данных из строки
  • Замена по шаблону
  • Парсинг файлов и текстов
  • Валидация ввода пользователя

Подключение RegExp через COM

В 1С нет встроенных регулярок, но можно использовать COM-объект VBScript.RegExp:

Функция ПроверитьРегуляркой(Строка, Шаблон) Экспорт
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Истина;  // Игнорировать регистр
    RegExp.Global = Истина;       // Искать все вхождения
    RegExp.MultiLine = Истина;    // Многострочный режим
    RegExp.Pattern = Шаблон;
    
    Возврат RegExp.Test(Строка);
    
КонецФункции
⚠️ Важно: COM-объекты работают только в Windows. Для Linux используйте внешние компоненты.

Практические примеры

Проверка email

Функция ПроверитьEmail(Email) Экспорт
    Шаблон = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
    Возврат ПроверитьРегуляркой(Email, Шаблон);
КонецФункции

// Использование:
// ПроверитьEmail("test@example.com") → Истина
// ПроверитьEmail("invalid-email") → Ложь

Проверка телефона

Функция ПроверитьТелефон(Телефон) Экспорт
    // Формат: +7 (999) 123-45-67 или 89991234567
    Шаблон = "^(\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}$";
    Возврат ПроверитьРегуляркой(Телефон, Шаблон);
КонецФункции

Проверка ИНН

Функция ПроверитьИНН(ИНН) Экспорт
    // 10 цифр для юрлиц, 12 для физлиц
    Шаблон = "^\d{10}$|^\d{12}$";
    Возврат ПроверитьРегуляркой(ИНН, Шаблон);
КонецФункции

Извлечение данных

Функция ИзвлечьПоШаблону(Строка, Шаблон) Экспорт
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.Global = Истина;
    RegExp.Pattern = Шаблон;
    
    Результат = Новый Массив;
    
    Matches = RegExp.Execute(Строка);
    Для Каждого Match Из Matches Цикл
        Результат.Добавить(Match.Value);
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

// Пример: извлечь все числа из строки
// ИзвлечьПоШаблону("Заказ 123 на сумму 5000 руб", "\d+")
// Результат: ["123", "5000"]

Замена по шаблону

Функция ЗаменитьПоШаблону(Строка, Шаблон, Замена) Экспорт
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.Global = Истина;
    RegExp.Pattern = Шаблон;
    
    Возврат RegExp.Replace(Строка, Замена);
    
КонецФункции

// Пример: оставить только цифры
// ЗаменитьПоШаблону("+7 (999) 123-45-67", "[^\d]", "")
// Результат: "79991234567"

🛠️ Шпаргалка по синтаксису

\d Цифра (0-9)
\w Буква, цифра или _
\s Пробельный символ
. Любой символ
+ Один или более
* Ноль или более
? Ноль или один
{n} Ровно n раз
{n,m} От n до m раз
^ Начало строки
$ Конец строки
[abc] Любой из символов
[^abc] Любой кроме
() Группировка
| ИЛИ

Сложная обработка текста?

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

Написать в Telegram →