Кастомный валидатор для поля «Веб-формы» в 1С-Битрикс

Пример валидаторов на проверку E-mail и Номера телефона в федеральном формате

Файл валидатора E-mail: /bitrix/php_interface/form_validator_email.php

<?php
 
namespace Disweb;
 
use \Bitrix\Main\EventManager;
 
class FormValidatorEmail
{
	function getDescription()
	{
		return [
			'NAME' => 'dw_email', // идентификатор
			'DESCRIPTION' => 'E-mail', // наименование
			'TYPES' => [
				'text'
			], // типы полей
			'SETTINGS' => [__CLASS__, 'getSettings'], // метод, возвращающий массив настроек
			'CONVERT_TO_DB' => [__CLASS__, 'toDB'], // метод, конвертирующий массив настроек в строку
			'CONVERT_FROM_DB' => [__CLASS__, 'fromDB'], // метод, конвертирующий строку настроек в массив
			'HANDLER' => [__CLASS__, 'doValidate'], // валидатор
		];
	}
 
	function getSettings()
	{
		return [];
	}
 
	function toDB($arParams)
	{
		// возвращаем сериализованную строку
		return serialize($arParams);
	}
 
	function fromDB($strParams)
	{
		// никаких преобразований не требуется, просто вернем десериализованный массив
		return unserialize($strParams);
	}
 
	function doValidate($arParams, $arQuestion, $arAnswers, $arValues)
	{
		global $APPLICATION;
 
		foreach ($arValues as $value)
		{
			// проверяем на пустоту
			if (!preg_match("/^([0-9a-zA-Z]+([\-\.\_]{0,1}[0-9a-zA-Z]*)*@[0-9a-zA-ZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]+([\-\.\_]{0,1}[0-9a-zA-Z]+)*[\.][a-zA-ZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]{2,9})$/", $value))
			{
				// вернем ошибку
				$APPLICATION->ThrowException('Не верно запонен "E-mail"');
				
				return false;
			}
 
		}
 
		// все значения прошли валидацию, вернем true
		return true;
	}
}

Файл валидатора номера телефона: /bitrix/php_interface/form_validator_phone.php

<?php
 
namespace Disweb;
 
use \Bitrix\Main\EventManager;
 
class FormValidatorPhone
{
	function getDescription()
	{
		return [
			'NAME' => 'dw_phone', // идентификатор
			'DESCRIPTION' => 'Номер телефона', // наименование
			'TYPES' => [
				'text'
			], // типы полей
			'SETTINGS' => [__CLASS__, 'getSettings'], // метод, возвращающий массив настроек
			'CONVERT_TO_DB' => [__CLASS__, 'toDB'], // метод, конвертирующий массив настроек в строку
			'CONVERT_FROM_DB' => [__CLASS__, 'fromDB'], // метод, конвертирующий строку настроек в массив
			'HANDLER' => [__CLASS__, 'doValidate'], // валидатор
		];
	}
 
	function getSettings()
	{
		return [];
	}
 
	function toDB($arParams)
	{
		// возвращаем сериализованную строку
		return serialize($arParams);
	}
 
	function fromDB($strParams)
	{
		// никаких преобразований не требуется, просто вернем десериализованный массив
		return unserialize($strParams);
	}
 
	function doValidate($arParams, $arQuestion, $arAnswers, $arValues)
	{
		global $APPLICATION;
 
		foreach ($arValues as $value)
		{
			$value = preg_replace('/[^0-9]/', '', $value);
			// проверяем на пустоту
			if (strlen($value) < 10)
			{
				// вернем ошибку
				$APPLICATION->ThrowException('Не верно заполнен "Номер телефона"');
				
				return false;
			}
 
		}
 
		// все значения прошли валидацию, вернем true
		return true;
	}
}

В файл /bitrix/php_interface/init.php добавить регистрацию и подгрузку валидаторов:

<?php

use \Bitrix\Main\EventManager;
use \Bitrix\Main\Loader;

Loader::registerAutoLoadClasses(null, [
    'Disweb\FormValidatorPhone' => '/bitrix/php_interface/form_validator_phone.php',
    'Disweb\FormValidatorEmail' => '/bitrix/php_interface/form_validator_email.php',
]);

EventManager::getInstance()->addEventHandlerCompatible('form', 'onFormValidatorBuildList', [
	'Disweb\FormValidatorPhone',
	'getDescription',
]);

EventManager::getInstance()->addEventHandlerCompatible('form', 'onFormValidatorBuildList', [
	'Disweb\FormValidatorEmail',
	'getDescription',
]);