Есть много способов записать один и тот же номер телефона. 81234567890, +71234567890, 1234567890, 8 (123) 456-78-90
- только несколько очевидных примеров для российских номеров, а если Вам звонят иностранные клиенты со всего мира, то количество вариантов возрастает многократно.
Для человека между этими вариантами нет большой разницы - все сработают если набрать, сравнить два формата и понять что номер один и тот же очень легко. Но для программ это совершенно разные номера. Например, если контакт в CRM сохранён с номером на +7, а в поиске ввести с 8, то контакт может не найтись.
Для решения таких проблем раньше использовалось только форматирование номеров в кастомизациях, поэтому в новых версиях Itgrix bx 3.7.0 и Itgrix amo 2.10.0 мы добавляем функцию автозамены, позволяющую настраивать форматирование номеров регулярными выражениями (regexp) в интерфейсе настройки модуля (в админке).
-
Автозамена модифицирует номера клиентов и/или пользователей, совпадающие с шаблонами, при помощи подстановки замен. Шаблонов может быть несколько.
-
Операции автозамены выполняются перед отправкой запросов в CRM, поэтому автозамена влияет на создание/поиск сущностей и задач и поиск пользователей.
-
Для каждого номера замена выполняется по всему списку шаблонов последовательно. Это значит что порядок шаблонов важен, потому что выполнение первой замены может обеспечить или предотвратить совпадение номера с последующими шаблонами.
Регулярные выражения
Для описания правил автозамены используется язык регулярных выражений (regexp), так же как и в кастомизациях. Это общепринятый способ поиска и замены текста.
Для того чтобы создавать и тестировать регулярные выражения, мы предлагаем воспользоваться онлайн инструментами, такими как regex101.com (в меню слева нужно выбрать вариант Golang и ниже для проверки замены - Substitution).
Краткий список полезных элементов шаблонов
Символы
-
^- начало строки -
$- конец строки -
.- любой символ -
\d- цифра -
\D- не цифра -
\w- цифра или буква -
\W- не цифра и не буква -
\s- пробел (включая необычные варианты вроде неразрывных пробелов) -
\S- не пробел -
[ab\s0-5]- один из символов:a,b, пробел, цифра от0до5 -
abc 123- буквально строка "abc 123", может быть частью большей строки -
abc|123- строка "abc" или строка "123", может быть частью большей строки -
^abc 123$- строка "abc 123" от начала до конца без других символов до и после -
\(,\),\[,\],\{,\},\+,\?,\*,\.,\|,\\- буквальное представление символов, которые без\имеют особый смысл
Повторения
Сразу после символа (или группы символов) можно указать сколько раз подряд он может присутствовать.
-
?- 0 или 1 раз -
+- 1 и более раз -
*- любое количество раз -
{5}- 5 раз -
{5,10}- от 5 до 10 раз -
{,10}- от 0 до 10 раз -
{5,}- от 5 и более раз
Например, \d{10} означает "10 цифр", \+? означает "0 или 1 знак +", а 0+ - один и более нулей.
Группы, замена
Символы можно объединять в группы с помощью скобок. Это полезно при описании повторения нескольких символов, например (10){3} означает "101010".
Текст групп можно использовать при замене при помощи подстановки вида $N, где N - порядковый номер группы.
Например, при замене шаблона 8(\d{6})(\d{4}) подстановка $1 будет означать содержимое группы (\d{6}), то есть первые 6 цифр после "8", а подстановка $2 будет означать содержимое группы (\d{4}), то есть последующие 4 цифры.
Примеры автозамены номеров клиентов
| Шаблон | Замена | Описание |
|---|---|---|
^\+?7(\d{10})$
|
8$1
|
Заменяет префиксы +7 и 7 в начале номера, состоящего из префикса и 10 цифр, на 8, например +74951234567 → 84951234567 и 74951234567 → 84951234567 Этот шаблон включен по умолчанию
|
^\+7
|
8
|
Заменяет +7 в начале любого номера на 8, например +712345671234567 → 812345671234567
|
.*(\d{10})$
|
8$1
|
Заменяет номер, имеющий в конце 10 цифр, на 8 и эти 10 цифр, например 0071234567890 → 81234567890
|
^(\d{7})$
|
8495$1
|
Добавляет к 7-значному номеру префикс 8495, например 1234567 → 84951234567
|
\D
|
(пустая строка) |
Удаляет все символы кроме цифр, например +7 (495) 123-45-67 → 74951234567
|
[\s()-]
|
(пустая строка) |
Удаляет все символы пробелов, скобок и дефисов, например +7 (495) 123-45-67 → +74951234567
|
^(.*)(\d{3})(\d{3})(\d{2})(\d{2})$
|
$1 ($2) $3-$4-$5
|
Форматирует номер в виде x (xxx) xxx-xx-xx, например +74951234567 → +7 (495) 123-45-67
|
^0\d{2}(\d+)$
|
8$1
|
Заменяет номер вида "ноль, две цифры, ещё цифры" на 8 и цифры в конце номера, например 0771234567890123 → 81234567890123
|
1234567$
|
7654321
|
Заменяет 1234567 в конце номера на 7654321, например 84951234567 → 84957654321
|
^84951234567$
|
84957654321
|
Заменяет буквально номер 84951234567 на 84957654321
|
Примеры автозамены номеров пользователей
| Шаблон | Замена | Описание |
|---|---|---|
.*(\d{4}$)
|
$1
|
Удаляет из номера всё кроме последних 4 цифр, например +71234564321 → 4321
|
^8123456(\d{4})$
|
$1
|
Удаляет из номера префикс 8123456, оставляя последние 4 цифры, например 849576543214321 → 4321
|
.*123456(\d{4})$
|
$1
|
Удаляет из номера, заканчивающегося на 123456 и ещё 4 цифры, всё кроме последних 4 цифр, например +71234564321 → 4321
|
^1\d{3}$
|
2$1
|
Заменяет первую цифру 1 в 4-значном номере на 2, например 1234 → 2234
|
^1234$
|
4321
|
Заменяет буквально номер 1234 на 4321
|