Как-то появилась задача создать валидатор номеров телефона для веб-форм. И что вы думаете? Создал! Код ниже.
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!).