Недокументированный битрикс. Парсер и форматтер для номеров телефонов

В битриксе всегда было полно вспомогательного функционала, который часто располагался в нерелевантных местах. Например вещи, необходимые для работы с ценой, почему-то находились в модуле инфоблоков, или хранилище для адресов в модуле магазина.

На этот раз вроде все на месте. В 17.5 в битриксе появился своего рода «парсер» для номеров телефонов. А заодно вместе с ним и форматтер. Если в двух словах, то битрикс теперь может попытаться преобразовать строковое представление номера телефона в объект, а также преобразовать его обратно в строку в заранее определенном формате. Эдакая нормализация.

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

Интерфейс работы довольно прост и, в общем-то, понятен:

Функционал используется как нормализатор для номеров телефонов в модуле рассылок.

Непонятно, как ошибки обрабатывать, да и как вообще понять, получилось у библиотеки распознать, а если нет — то почему… но это уже детали.

В общем, ничего особенного, если бы не одно но. Я уже где-то это видел )

В продукт добавляется все больше и больше полу-функций. Все эти полу-функции копируются с какого-нибудь готового решения и потом забрасываются навсегда. Вспомнить хотя бы печально известную либу BX для фронтенда, которая копирует jquery чуть менее, чем полностью и которой никто, кроме разработчиков битрикса, не пользуется. Или распиаренные Битрикс24 сайты, которые скопировали с Тильды? Список можно продолжать.

Вот и в этот раз я почуял, что я уже где-то что-то подобное видел. И вспомнил где — в https://github.com/giggsey/libphonenumber-for-php. Довольно популярная либа для парсинга и форматирования номеров. Предоставляет куда более широкие возможности, задокументирована, покрыта тестами, легко встраивается в проект с помощью composer, интернационализация и многое другое.
Интерфейс работы с либой — практически идентичен (скопировано из официального мануала):

Спрашивается, зачем копировать? Вопрос риторический… Если вам немного не подходит библиотека — ну помогите вы проекту, запилите в нем недостающую фичу и встройте к себе, ведь будет дешевле, чем пилить с нуля и поддерживать полу-продукт. А встроить с composer — вообще не проблема, ведь битрикс поддерживает composer теперь официально. Эх …