Предположим, что у нас уже есть веб форма, с вопросами (полями):
Имя - обязательное к заполнению.
Телефон - обязательное к заполнению.
Учтите, если у вас есть желание хранить номер в формате +38 (0ХХ) ХХХ-ХХ-ХХ, необходимо будет использовать форматирование (например регулярным выражением, или предварительно используя Jquery Inputmask), но это также не исключает необходимость проверки записи при внесении их в базу.
Телефон - обязательное к заполнению.
Учтите, если у вас есть желание хранить номер в формате +38 (0ХХ) ХХХ-ХХ-ХХ, необходимо будет использовать форматирование (например регулярным выражением, или предварительно используя Jquery Inputmask), но это также не исключает необходимость проверки записи при внесении их в базу.
//ФАЙЛ init.php
//Корректировка номера телефона
function PhoneNumber($phone) {
$result = preg_match_all('/\d/',$phone,$found);
$res = implode('',$found[0]);
if(($found[0][0] == '7' || $found[0][0] == '8') && strlen($res) >= '11' && $found[0][1] != 0) {
$phone = '7'.substr($res,1,10);
} elseif(($found[0][0].$found[0][1] == '80') && strlen($res) >= '11') {
$phone = '38'.substr($res,1,10);
} elseif(($found[0][0].$found[0][1].$found[0][2] == '380') && strlen($res) >= '12') {
$phone = '380'.substr($res,3,9);
} elseif(($found[0][0].$found[0][1].$found[0][2] == '375') && strlen($res) >= '12') {
$phone = '375'.substr($res,3,9);
} elseif(strlen($res) == '10' && $res{0} == 0) {
$phone = '38'.$res;
} elseif(strlen($res) == '9') {
$phone = '375'.$res;
} elseif(strlen($res) == '10') {
$phone = '7'.$res;
} elseif(strlen($res) == '14') {
$phone = $res;
} else {
$phone = '';
}
return $phone;
}
AddEventHandler('form', 'onBeforeResultAdd', 'stop_onBeforeResultAdd');
function stop_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{
global $APPLICATION;
//проверяем, что именно форма с ID=9 передает результат
if ($WEB_FORM_ID == 9)
{
$phone = PhoneNumber($arrVALUES['form_text_63']);//проверяем номер и приводим его к виду 380ХХХХХХХХХ
$arFieldsf[] = array(
"CODE" => "SIMPLE_QUESTION_499", // код поля по которому фильтруем
"FILTER_TYPE" => "text", // фильтруем по числовому полю
"PARAMETER_NAME" => "USER", // фильтруем по введенному значению
"VALUE" => $phone, // значение по которому фильтруем
"EXACT_MATCH" => "Y" // ищем точное совпадение
);
$arFilter = array (
"FIELDS" => $arFieldsf,
"STATUS_ID" => 8, //отфильтровать необходимо результаты в статусе с ID = 8 (необязательно)
);
$rsResults = CFormResult::GetList(9, $by = 's_id', $order = 'asc', $arFilter, $is_filtered, 'N', false);
if ($rsResults->SelectedRowsCount() > 0){
$APPLICATION->ThrowException('Извините, но номер '.$arrVALUES['form_text_63']." уже принимает участие в акции");
}else{
if (!strlen($phone) == 12){//12 знаков для украины
$APPLICATION->ThrowException('Вы не верно ввели номер телефона, будте внимательнее!');
}
}
}
}