Кастомный валидатор для поля «Веб-формы» в 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',
]);
Спасибо!