Приведение номера телефона к одному формату 1с

Как отформатировать строку по маске

Например, есть необходимость имеющийся номер телефона «9031234523» или «+79031234567»

преобразовать к формату «+7 (903) 123 45 67». Как это легко и быстро сделать штатными средствами

1С без использования регулярных выражений
Автор статьи: askharlov | Редакторы:
Последняя редакция №3 от 01.11.17 | История
URL: http://kb.mista.ru/article.php?id=953

Ключевые слова: формат, маска, регулярные выражения

Входящие параметры:

— НомерТелефона. Например: «79031232334»

Дополнительный инструментарий:

— Элемент формы поле вода «Телефон» с установленной маской. Например: «+7 (999)  999 99 99»

Результат:

— НомерТелефонаСМаской

Пример кода:

МаскаТелефона = ЭлементыФормы.Телефон.Маска;

КвоЦифрВМаске = 0;
Если НЕ ПустаяСтрока(МаскаТелефона) Тогда
Для НомерСимволаМаски = 1 По СтрДлина(МаскаТелефона) Цикл
 ТекущийСимволМаски = Сред(МаскаТелефона, НомерСимволаМаски, 1);
 Если ТекущийСимволМаски = "9" Тогда
  КвоЦифрВМаске = КвоЦифрВМаске + 1;
 КонецЕсли;      
КонецЦикла;  
КонецЕсли;
Если КвоЦифрВМаске = 0 Тогда
ТелефонДляМаски = НомерТелефона;
Иначе
ТелефонДляМаски = Прав(НомерТелефона, КвоЦифрВМаске);
КонецЕсли;      
ЭлементыФормы.Телефон.Значение = ТелефонДляМаски; // применяем маску
НомерТелефонаСМаской = ЭлементыФормы.Телефон.Значение; // получаем строку с маской

Естественно, если в НомерТелефона присутствуют нецифровые символы (например пробелы или «(« или

«)»), то можно предварительно его обработать, оставив только цифры

При заполнении телефонов в контактной информации партнеров, контрагентов, контактных и физических лиц система не делает никакой проверки ни по длине номера (количеству цифр), ни по шаблону (маске). Можно использовать или не использовать в телефоне пробелы, тире, круглые скобки и т.п. В случае, если у вас подключена телефония или настроена отправка смс из информационной базы, отсутствие стандартизации и шаблонизации при вводе телефонов может привести к различным сбоям. Например, отправка смс перестает работать, если в номере телефона присутствуют любые символы, кроме цифр.

Эта разработка решает несколько задач:

  • позволяет для конкретного справочника настроить шаблон ввода телефона (маску),
  • выводит список уже заведенных в базе элементов справочников, телефон в которых не соответствует настроенной маске,
  • обрабатывает все имеющиеся в базе телефоны для соответствия настроенной маске,
  • проверяет перед записью элементов справочников корректность ввода телефона (соответствие шаблону).

После добавления расширения в базу появляется новая команда в разделе Администрирование.

раздел Администрирование

Нажав на команду, получаем список настроек стандартизации телефонных номеров, создаем новую настройку.

настройки стандартизации телефонов

В настройке нужно выбрать справочник и ввести шаблон телефонного номера (в шаблоне должно быть 10 русских символов Х, которые при обработке заменяются на конкретные цифры).

выбор справочника

Если вам нужно применять шаблон только к мобильным номерам, устанавливайте признак Только сотовые.

настройка шаблона для ввода телефонов

Выделив нужную настройку в списке, можем посмотреть список некорректных телефонов по данной настройке.

настройки шаблонов телефонных номеров отчет по некорректным телефонам

Для исправления некорректных номеров выделяем нужную настройку в списке и нажимаем Изменить по шаблону.

предупреждение перед изменением телефонов

По окончании появится протокол.

протокол выполнения

Далеко не все некорректные телефоны отредактированы — в некоторых просто не хватает цифр, а другие не относятся к сотовым телефонам.

Если при создании (или редактировании) элемента справочника ввести номер телефона не по шаблону, разработка автоматически его изменит и приведет в соответствие с шаблоном.

Для корректной работы расширения необходимо отключить Безопасный режим:

отключение безопасного режима

Используя данное расширение, вы легко наведете порядок в своей телефонной базе и защитите себя от сбоев в работе телефонии и при отправке смс, вызванных некорректным форматом номера телефона.

Релиз 1.1.1.2 от 15.09.2020

Добавлен контроль уникальности телефонного номера перед записью справочников.

контроль уникальности телефона

К примеру, перед записью партнера разработка будет проверять, существует ли в базе другой партнер с таким же телефоном. Если да, то новый не запишется, и будет показано уведомление.

Для корректной работы расширения режим совместимости вашей конфигурации должен быть не ниже 8.3.12.

Содержание:

1.       Что такое поле Маска ввода

2.       Ограничения в масках ввода в 1С  

1.    Что такое поле Маска ввода

В данной статье будет описано, что такое поле «Маска ввода» в 1С. Также будут приведены все форматы и ограничители, которые доступны в поле «Маска ввода».

Когда в системе 1С есть поле ввода, которое имеет тип «строка», то в таком случае к нему есть возможность применить маску ввода данных. Данная функция отвечает за форматирование внешнего вида информации и за её количество. Маска ввода может находить практическое применение: маска ввода даты, маска ввода номера телефона, кода из сообщения.

Сама маска ввода может быть задана и при помощи конфигуратора, и текстом программы. 

2.    Ограничения в масках ввода в 1С

Рассмотрим, какие существуют форматы и ограничители свойств масок ввода в системе 1С.

Форматы-ограничители для поля «Маска ввода»:

·        9 – вводиться могут только цифры;

·        # — вводиться могут все цифры, пробел и знаки «+» и «-»;

·        h – вводиться могут только шестеричные цифры;

·        @ — вводиться могут буквенные символы, при этом все они будут становиться верхним регистром;

·        N – вводиться могут любые буквенные символы, регистр при этом не меняется;

·        U – аналогично «@» — можно вводить буквенные символы, и они будут преобразованы в верхний регистр;

·        I – можно вводить любые символы, но все они будут преобразованы в верхний регистр;

·        X – вводиться могут любые символы латиницы.

Чтобы запретить вводить какой-либо конкретный знак, это нужно прописать до того, как сделать маску ввода.

Символы «.», «(», «)», «-» и «,» также могут быть прописаны в маске ввода, с их помощью происходит форматирование строки. Рассмотрим примеры заданий масок ввода:

Пример №1: пусть нужно сделать маску ввода телефона, при этом, в нём должен присутствовать код города. В таком случае в системе 1С нужно написать маску ввода «9 (999) 999 99 99».

Пример №2: пусть нужно вводить в поле информацию кода накладной, вида «код.подразделение.месяц.год», в этом случае маска ввода будет выглядеть следующим образом – «UUUU.99.9999».

Замечание: при задании маски ввода её длина должна соответствовать длине строки. В случае, когда в строке может быть несколько форматов, потребуется написать несколько масок ввода — через точку с запятой.

Пример №3: пусть нужно ввести либо мобильный номер телефона, либо домашний (городской), тогда маска ввода номера будет выглядеть следующим образом – «9 (999) 999 99 99;999-99-99».

Если поместить значение из маски ввода в текст, который имеет привязку к данному полю, то значения преобразуются следующим образом: если в маске ввода символ «@», при этом в строке находится пробел, то пробел будет удалён.

Если в маске ввода есть только символы «@», то из текста все значения (которые не специальные символы) будут удалены после крайнего блока, заполненного символами «@».

Пример №4: пусть есть маска ввода следующего вида – «@@.@@.@@», а текст ввели «35. 3. .», данный текст будет преобразован в «35.3».

Чтобы прописать в маске ввода один из символов, который является специальным, необходимо перед данным символом поставить «».

В данной статье было описано, что такое маска ввода в 1С, а также описаны все критерии, параметры и форматирование масок ввода с примерами того, как они работают на практике.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

На php

Источник:

<?php

/**
 * Проверка корректности телефонного номера (с кодом города) в начале строки.
 * Пример строки с корректным тел. номером: "8-495-1234567, 111-22-33 (*620)".
 *
 * Функция умеет форматировать тел. номер в международный формат.
 * Пример строки с форматированным тел. номером : "+7 (495) 123-45-67, 111-22-33 (*620)".
 *
 * @param   string  $s        тел. номер
 * @param   array   &$parsed  массив частей тел. номера с ключами:
 *                              zone   -- зона, например: +7
 *                              code   -- код города, например: 495 (целое число типа int)
 *                              number -- номер, например: 1234567  (целое число типа int)
 *                              main   -- тел. номер в международном формате
 *                              extra  -- остаток после тел. номера
 *                              all    -- тел. номер в международном формате + остаток
 * @param   string  $hyphen   дефис  для форматироания тел. номера в международном формате
 * @param   string  $space    пробел для форматироания тел. номера в международном формате
 * @return  bool              возвращает TRUE, если тел. номер корректный и FALSE в противном случае.
 *
 * @link    http://ru.wikipedia.org/wiki/Телефонный_код_страны
 *
 * @license  http://creativecommons.org/licenses/by-nc-sa/3.0/
 * @author   Nasibullin Rinat <n a s i b u l l i n  at starlink ru>
 * @charset  ANSI
 * @version  3.1.0
 */
function phone_number_check($s, &$parsed = null, $hyphen = "xe2x80x93", $space = "xc2xa0")
{
    static $trans = array(
        #DEPRECATED:
        #'-'  => ' ',
        #'('  => ' ',
        #')'  => ' ',
        "t" => ' ',            # [TAB]
        "xc2xa0"     => ' ',  # UTF-8 &nbsp;
        "xe2x88x92" => '-',  # UTF-8 &minus;
        "xe2x80x93" => '-',  # UTF-8 &ndash;
        "xe2x80x94" => '-',  # UTF-8 &mdash;
    );

    #коды номеров городских телефонов России
    #TODO дополнить список с крупными городами России
    static $city_codes = array(
        495 => '',  #Москва
        499 => '',  #Москва
        496 => '',  #Московская область
        812 => '',  #Санкт-Петербург
    );

    /*
    Примеры правильных тел. номеров:
      #3      #4  #5 #6
      (812)   571-84-78
      (4922)  33-64-32
      (41322) 977-17
    */
    $s = trim(preg_replace('/x20x20+/s', ' ', strtr($s, $trans)));  #вырезаем лишние пробелы
    if (! preg_match('/^  (?!-)
                          (?P<zone>+d|8)?  #1 зона или код выхода на межгород (необязательно)
                          (?:x20?(|(-|^))  #2
                          (?P<code>d{3,5})  #3 код города или региона для мобильного номера
                          (?(2)-|)x20?)    #условные подмаски
                          (d{2,3})          #4 первая группа
                          -?
                          (d{2})            #5 вторая группа
                          (                  #6
                            -?
                            (d{2})          #7 третья группа (необязательно)
                          )?
                          (?!d)
                          (.*)               #8
                       $/sx', $s, $m)) return false;
    $zone   = ($m['zone'] === '' || $m['zone'] === '8' ? '+7' : $m['zone']);
    $code   = $m['code'];
    $number = $m[4] . $m[5] . @$m[7];
    if (strlen($code . $number) !== 10) return false;  #всего д.б. 10 цифр!

    /*
    Номер __городского__ телефона НЕ может начинаться с нуля или восьмёрки (мобильный может)
      0 зарезервирован за спецслужбами (01, 02, 03, 04, 09)
      8 зарезервирован за кодом междугородного вызова
    */
    if (array_key_exists($code, $city_codes) && preg_match('/^[08]/s', $number)) return false;

    #защита "от дурака" для номеров типа 222-22-22
    if (preg_match('/^(d)\1{6,}/s', $number)) return false;

    #форматируем тел. номер в международный формат
    $main = str_replace('-', $hyphen, $zone . $space . '(' . $code . ')' . $space . $m[4] . '-' . $m[5] . (array_key_exists(7, $m) ? '-' . $m[7] : '') );
    $parsed = array(
        'zone'   => $zone,
        'code'   => intval($code),
        'number' => intval($number),
        'main'   => $main,
        'extra'  => $m[8],
        'all'    => $main . $m[8],
    );
    #d($parsed);
    return true;
}

?>

Это тоже интересно:

  • Приватный номер телефона что это такое
  • Привязать номер телефона activision
  • Приватный номер телефона как понять
  • Привязать карту к номеру телефона сбербанк через интернет
  • Привязать apple id к другому номеру телефона

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии