Автозамена номеров телефонов
Last updated
Last updated
Есть много способов записать один и тот же номер телефона. 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