Валидатор номера телефона для веб-формы

4 Апреля 2018

Как-то появилась задача создать валидатор номеров телефона для веб-форм. И что вы думаете? Создал! Код ниже.

	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!).

Возврат к списку