Как-то появилась задача создать валидатор номеров телефона для веб-форм. И что вы думаете? Создал! Код ниже.
class CFormCustomValidatorNumberEx
{
function GetDescription() {
return array(
"NAME" => "custom_phone_validator", // идентификатор
"DESCRIPTION" => "Проверка номера телефона", // наименование
"TYPES" => array("text", "textarea"), // типы полей
"SETTINGS" => array("CFormCustomValidatorNumberEx", "GetSettings"), // метод, возвращающий массив настроек
"CONVERT_TO_DB" => array("CFormCustomValidatorNumberEx", "ToDB"), // метод, конвертирующий массив настроек в строку
"CONVERT_FROM_DB" => array("CFormCustomValidatorNumberEx", "FromDB"), // метод, конвертирующий строку настроек в массив
"HANDLER" => array("CFormCustomValidatorNumberEx", "DoValidate") // валидатор
);
}
function GetSettings() {
return false;
}
function ToDB($arParams) {
return false;
}
function FromDB($strParams) {
return unserialize($strParams);
}
function DoValidate($arParams, $arQuestion, $arAnswers, $arValues) {
global $APPLICATION;
foreach ($arValues as $value) {
// пустые значения пропускаем
if (strlen($value) <= 0) continue;
$reg = '/^((\+\d{1,3})|(\d{1,3}))?(\s|\-)?(\d{1,5}|\(\d{1,5}\))?(\s|\-)?(\d(\-|\s)?){6,9}\d$/';
if(!preg_match($reg, $value)){
$APPLICATION->ThrowException("#FIELD_NAME#: некорректный номер телефона");
return false;
}
}
return true;
}
}
// установим метод CFormCustomValidatorNumberEx в качестве обработчика события
AddEventHandler("form", "onFormValidatorBuildList", array("CFormCustomValidatorNumberEx", "GetDescription"));
Этот валидатор предназначен для номеров не меньше 7 символов в длину, при этом могут быть указаны телефонные номера практически любой страны (а может и любой).
Этот код должен быть размещен или подключен как отдельный файл в файле /bitritx/php_interface/init.php. Если такого файла нет - создайте его (do it!).