Проверка корректности ввода адреса электронной почты — это базовая задача при разработке интерфейсов в 1С. Ошибки в написании email могут привести к невозможности отправки счетов, уведомлений или рассылок. В этой статье мы подробно разберем несколько способов валидации: от простых регулярных выражений до использования мощных инструментов Библиотеки стандартных подсистем (БСП).
Если ваша конфигурация не использует БСП или вам нужно быстро внедрить проверку в старую систему на обычных формах, можно воспользоваться механизмом VBScript.RegExp. Этот объект позволяет проверять текстовые строки на соответствие заданному шаблону.
Рассмотрим пример кода, который можно разместить в обработчике события ОкончаниеВводаТекста или ПриИзменении поля ввода. В данном случае мы будем использовать шаблон, который ограничивает ввод только латинскими символами, цифрами и допустимыми спецсимволами.
Процедура ЭлектроннаяПочтаПриИзменении(Элемент)
ТекстДляПроверки = Элемент.Значение;
// Создаем объект для работы с регулярными выражениями
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Ложь;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
// Устанавливаем шаблон (Pattern)
// Данный шаблон проверяет структуру: логин@домен.зона
RegExp.Pattern = "^[a-zA-Z0-9_'+*/^&=?~{}\-](\.?[a-zA-Z0-9_'+*/^&=?~{}\-])*\@((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:\d{1,3})?)||(((([a-zA-Z0-9][a-zA-Z0-9\-]+[a-zA-Z0-9])|([a-zA-Z0-9]{1,2}))[\.]{1})+([a-zA-Z]{2,6})))$";
Если НЕ RegExp.Test(ТекстДляПроверки) Тогда
Сообщить("Введенный email " + ТекстДляПроверки + " некорректен! Проверьте формат записи.");
// Можно очистить значение или заблокировать дальнейшие действия
// Элемент.Значение = "";
КонецЕсли;
КонецПроцедуры
Проанализируем используемый шаблон. Символы ^ и $ обозначают начало и конец строки соответственно, что гарантирует проверку всей строки целиком, а не ее части. Конструкция [a-zA-Z0-9...] описывает разрешенный набор символов для локальной части адреса. Однако стоит помнить, что регулярные выражения часто являются компромиссом между строгостью и гибкостью.
В современных версиях платформы 1С (начиная с 8.3.16) появилась возможность работать с регулярными выражениями напрямую, без использования COM-объектов. Это делает код кроссплатформенным и более производительным, что критично для работы на серверах под управлением Linux.
Разберем, как реализовать ту же проверку с помощью функции СтрПодобна или СтрНайтиПоРегулярномуВыражению. Посмотрим на пример функции, которую можно вызвать из любого модуля:
Функция АдресПочтыКорректен(Знач ТекстАдреса) Экспорт
// Шаблон для упрощенной проверки формата
Шаблон = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
// Используем встроенную функцию платформы
Результат = СтрНайтиПоРегулярномуВыражению(ТекстАдреса, Шаблон);
Возврат ЗначениеЗаполнено(Результат);
КонецФункции
Использование СтрНайтиПоРегулярномуВыражению позволяет избежать зависимости от системных библиотек Windows, что является стандартом для современной разработки.
Наиболее правильным и надежным способом в экосистеме 1С является использование методов БСП. Разработчики фирмы 1С уже реализовали сложную логику валидации, которая учитывает RFC-стандарты и специфику различных доменных зон.
Выясним, какую функцию использовать. В составе БСП есть общий модуль РаботаСАдресами (в некоторых версиях может называться иначе, например, связанный с проверкой контактной информации). Основной метод, который нам нужен — АдресЭлектроннойПочтыСоответствуетТребованиям.
Рассмотрим пример использования:
// Пример вызова в типовой конфигурации
Если НЕ РаботаСАдресами.АдресЭлектроннойПочтыСоответствуетТребованиям(Объект.Email) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Пожалуйста, введите корректный адрес электронной почты.");
КонецЕсли;
Преимущества метода БСП:
Важно помнить, что если ваша задача подразумевает поддержку адресов типа инфо@почта.рф, обычные "латинские" регулярные выражения не справятся. Для работы с ними необходимо либо расширять диапазон допустимых символов до [а-яА-Я], либо использовать предварительную конвертацию домена в Punycode (формат xn--...).
Проанализируем ситуацию: большинство корпоративных систем все еще требуют ввода email на латинице, но мир движется в сторону интернационализации. Если вы используете БСП, проверьте, включена ли в настройках поддержка кириллических доменов.
Подводя итог, выберем оптимальную стратегию для вашей задачи:
РаботаСАдресами.АдресЭлектроннойПочтыСоответствуетТребованиям(). Это "золотой стандарт" разработки.СтрНайтиПоРегулярномуВыражению.VBScript.RegExp, но тщательно тестируйте шаблон на граничных случаях (например, на адресах с дефисами или короткими доменными зонами).Помните, что никакая регулярная проверка не гарантирует существования почтового ящика. Максимальная надежность достигается только путем отправки тестового письма с подтверждением, но для первичной фильтрации опечаток описанные выше методы подходят идеально.