Вапико форматирование номеров телефонов

Здравствуйте!

Рассылки в WhatsApp — дело довольно сложное и неблагодарное, особенно если речь идёт о массовых. Пара жалоб от пользователей — и Вы в бане, и всё нужно начинать сначала.

Эту проблему решит Wapico — многофункциональный сервис для WhatsApp-маркетинга. Он автоматизирует весь процесс рассылки от покупки и прогрева номера до переноса лидов в CRM.

Возможности сервиса

Рассмотрим, что же именно предлагает клиентам Wapico. Мы не будем останавливаться на том, как настроить и запустить рассылку в WhatsApp— в сервисе есть очень подробные и наглядные инструкции (а также техподдержка, которая всегда поможет).

Сосредоточимся именно на возможностях, чтобы Вы знали, с чем Вам предстоит иметь дело. 

1. Приборная панель

Первое, что Вы видите в личном кабинете — дашборд со статистикой. Здесь отображается общее количество отправленных в этом месяце сообщений, данные по рассылкам — в том числе по неудавшимся, и по автоответчикам.

2. Мультичат

Соберите все чаты в одном окне — причём не только из разных рассылок, но и с разных номеров. Так Вы будете оперативнее реагировать на сообщения клиентов — и шансы продаж, конечно, закономерно вырастут.

3. Автоответчик

Автоответчик работает так: Вы рассылаете пользователям первое сообщение, чтобы побудить их к ответу — например, задаёте вопрос. Ответ обязательно нужен, чтобы у пользователя исчезла кнопка «заблокировать». А затем автоответчик отправляет ему предложение.

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

4. Рассылка сообщений

Сегментируйте аудиторию рассылки и собирайте контакты в группы. Создавайте рекламные кампании: можно рассылать текстовые сообщения, а можно рекламные с кнопкой. Можно запланировать рассылку заранее, а можно запустить её сразу. Управляйте, с каких аккаунтов отправлять сообщения. 

Кстати, сервис поддерживает Spintax, то есть сообщения можно рандомизировать и персонализировать.

5. Чат-бот

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

6. Экспорт участников в группу

Очень удобная функция: собирайте аудиторию из групп. Процедура простая: отправляете в группу сообщение, нажимаете кнопку — и список контактов Ваш. А дальше Вы уже и сами знаете, что делать.

7. API

Интегрируйте Ваши устройства с облачным API вотсаппа и подключите сервис к своему сайту и CRM — чтобы автоматизировать процессы и лиды сразу попадали в систему.

8. Управление аккаунтами

Чтобы снизить риск блокировки и охватить большую аудиторию, ведите рассылку сразу с нескольких аккаунтов. Управляйте ими из одного окна: активируйте, устанавливайте дневные лимиты на количество рассылок, удаляйте ненужные.

9. Файловый менеджер

Добавляйте в рассылки изображения, видео и pdf-файлы. Все они удобно хранятся в одном месте — при создании сообщения просто выберите нужный файл из библиотеки. Пополнить её можно разными способами: загрузить медиа с компьютера, из гугл-диска или прямой ссылкой. Чтобы долго не искать нужную картинку, пользуйтесь фильтром.

10. Шаблоны сообщений

Ещё одна довольно очевидная функция, которая значительно упростит Вам жизнь. Создавайте шаблоны сообщений на разные случаи, чтобы сэкономить время в будущем.

Дополнительные функции

Помимо стандартного набора для рассылок Wapico предлагает клиентам ещё несколько интересных функций для автоматизации работы.

1. Проверка на наличие WhatsApp

Онлайн чекер вотсапп: загружаете ф него клиентскую базу и видите, кто пользуется whatsapp, а кто нет. Соответственно, кому можно делать рассылки через мессенджер, а до кого придётся добираться другими путями. Это отлично скажется на конверсии — ну и сэкономите, конечно.

2. Форматирование номеров

Для корректной отправки рассылки номера абонентов нужно привести к единому формату. Что, собственно, и сделает для Вас сервис.

3. WhatsApp-чат на сайт

Установите на свой сайт бесплатный виджет чата WhatsApp. В сущности, это тот же самый онлайн-консультант, который можно интегрировать с чат-ботом — или диалог может вести живой оператор. 

4. Авторегистратор WhatsApp аккаунтов

Ещё одна фишка сервиса: Вам не нужно заморачиваться и самостоятельно регистрировать аккаунты для рассылки. Программа не только сделает это за Вас, но и автоматически подгрузит аккаунты в личный кабинет, а ещё прогреет их — то есть номера будут выглядеть как принадлежащие реальным людям и это снизит риск блокировки.

Преимущества Wapico

Возможностей, как видите, хватает. Отмечу, чем сервис выгоднее всего отличается от конкурентов:

1. Многофункциональность. Сервис можно использовать и для массовых рассылок (и даже для спама), и для сбора лидов и общения с клиентами, и как онлайн-консультант. И всё это в одном окне.

2. Гибкость. Можно подключить к сервису один аккаунт, а можно пятьдесят. Сообщения можно рандомизировать до бесконечности, а чат-бот может реагировать не только на ключевые фразы, но и на их отсутствие. Отправлять можно как текстовые сообщения, так и сообщения с кнопками — а ещё медиафайлы. В общем, Вы можете настроить идеальную для себя рассылку.

3. API. Интегрируйте сервис со своей CRM-системой, чтобы автоматизировать процесс обработки заявок. Интегрируйте устройства между собой, чтобы работать в программе могли несколько менеджеров одновременно. И так далее.

4. Техподдержка. Техподдержкой занимаются сами разработчики и на большинстве тарифов есть возможность участия в закрытом Telegram-чате. То есть помощь Вы будете получать буквально из первых рук.

5. Обучение. На сайте Wapico огромная база знаний. Во-первых, Вы, конечно, найдёте тем максимально подробные инструкции по использованию сервиса от простейших действий до сборки сценариев для чат-бота. Во-вторых, там много информации и по базовому WhatsApp-маркетингу: например, Вы узнаете, как самостоятельно прогреть номер и как избежать блокировок.

Коротко о главном

Wapico — буквально как швейцарский нож, если говорить о мессенджер-маркетинге. В первую очередь это, конечно, сервис для массовых рассылок Whatsapp, но его можно использовать и для обычного общения с клиентами.

Встроенный парсер групп и форматирование номеров помогут Вам дополнить и упорядочить клиентскую базу. Автоответчик, чат-бот и интеграция с сайтом и CRM автоматизируют работу с клиентами. Возможность подключить множество номеров — причём уже прогретых — снизит риск блокировки и увеличит эффективность рассылки. И это далеко не всё, что может сервис.

Wapico предлагает целых 7 тарифов на любой кошелёк и нужды, будь Вы мастером маникюра или крупным маркетинговым агентством. Стоимость начинается от 390 рублей в месяц. Тестовый период длится неделю и позволяет отправить до 100 бесплатных сообщений — более чем достаточно для того, чтобы проверить, подходит ли Вам сервис.

Рассылки в WhatsApp — дело довольно сложное и неблагодарное, особенно если речь идёт о массовых. Пара жалоб от пользователей — и Вы в бане, и всё нужно начинать сначала.

Эту проблему решит Wapico — многофункциональный сервис для WhatsApp-маркетинга. Он автоматизирует весь процесс рассылки от покупки и прогрева номера до переноса лидов в CRM.

Возможности сервиса

Рассмотрим, что же именно предлагает клиентам Wapico. Я не буду останавливаться на том, как настроить и запустить рассылку в WhatsApp— в сервисе есть очень подробные и наглядные инструкции (а также техподдержка, которая всегда поможет).

Сосредоточимся именно на возможностях, чтобы Вы знали, с чем Вам предстоит иметь дело.

1. Приборная панель

Первое, что Вы видите в личном кабинете — дашборд со статистикой. Здесь отображается общее количество отправленных в этом месяце сообщений, данные по рассылкам — в том числе по неудавшимся, и по автоответчикам.

приборная панель в  wapico

2. Мультичат

Соберите все чаты в одном окне — причём не только из разных рассылок, но и с разных номеров. Так Вы будете оперативнее реагировать на сообщения клиентов — и шансы продаж, конечно, закономерно вырастут.

мультичат в вапико

3. Автоответчик

Автоответчик работает так: Вы рассылаете пользователям первое сообщение, чтобы побудить их к ответу — например, задаёте вопрос. Ответ обязательно нужен, чтобы у пользователя исчезла кнопка «заблокировать». А затем автоответчик отправляет ему предложение.

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

4. Рассылка сообщений

Сегментируйте аудиторию рассылки и собирайте контакты в группы. Создавайте рекламные кампании: можно рассылать текстовые сообщения, а можно рекламные с кнопкой. Можно запланировать рассылку заранее, а можно запустить её сразу. Управляйте, с каких аккаунтов отправлять сообщения.

Кстати, сервис поддерживает Spintax, то есть сообщения можно рандомизировать и персонализировать.

инструмент рассылки в вапико

5. Чат-бот

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

чат бот в  сервисе рассылок вапико

6. Экспорт участников в группу

Очень удобная функция: собирайте аудиторию из групп. Процедура простая: отправляете в группу сообщение, нажимаете кнопку — и список контактов Ваш. А дальше Вы уже и сами знаете, что делать.

меню экспорта участников wapico

7. API

Интегрируйте Ваши устройства с облачным API вотсаппа и подключите сервис к своему сайту и CRM — чтобы автоматизировать процессы и лиды сразу попадали в систему.

меню интеграции wapiko с crm

8. Управление аккаунтами

Чтобы снизить риск блокировки и охватить большую аудиторию, ведите рассылку сразу с нескольких аккаунтов. Управляйте ими из одного окна: активируйте, устанавливайте дневные лимиты на количество рассылок, удаляйте ненужные.

настройки аккаунта в wapiko

9. Файловый менеджер

Добавляйте в рассылки изображения, видео и pdf-файлы. Все они удобно хранятся в одном месте — при создании сообщения просто выберите нужный файл из библиотеки. Пополнить её можно разными способами: загрузить медиа с компьютера, из гугл-диска или прямой ссылкой. Чтобы долго не искать нужную картинку, пользуйтесь фильтром.

файловый менеджер сервиса wapico

10. Шаблоны сообщений

Ещё одна довольно очевидная функция, которая значительно упростит Вам жизнь. Создавайте шаблоны сообщений на разные случаи, чтобы сэкономить время в будущем.

шаблоны сообщений в вапико

Дополнительные функции

Помимо стандартного набора для рассылок Wapico предлагает клиентам ещё несколько интересных функций для автоматизации работы.

1. Проверка на наличие WhatsApp

Онлайн чекер вотсапп: загружаете ф него клиентскую базу и видите, кто пользуется whatsapp, а кто нет. Соответственно, кому можно делать рассылки через мессенджер, а до кого придётся добираться другими путями. Это отлично скажется на конверсии — ну и сэкономите, конечно.

проверка на наличие whatsapp в сервисе рассылок

2. Форматирование номеров

Для корректной отправки рассылки номера абонентов нужно привести к единому формату. Что, собственно, и сделает для Вас сервис.

форматирование номеров в сервисе рассылок

3. WhatsApp-чат на сайт

Установите на свой сайт бесплатный виджет чата WhatsApp. В сущности, это тот же самый онлайн-консультант, который можно интегрировать с чат-ботом — или диалог может вести живой оператор.

whatsapp виджет wapico на сайт

4. Авторегистратор WhatsApp аккаунтов

Ещё одна фишка сервиса: Вам не нужно заморачиваться и самостоятельно регистрировать аккаунты для рассылки. Программа не только сделает это за Вас, но и автоматически подгрузит аккаунты в личный кабинет, а ещё прогреет их — то есть номера будут выглядеть как принадлежащие реальным людям и это снизит риск блокировки.

авторегистратор whatsapp аккаунтов

Преимущества Wapico

Возможностей, как видите, хватает. Отмечу, чем сервис выгоднее всего отличается от конкурентов:

1. Многофункциональность. Сервис можно использовать и для массовых рассылок (и даже для спама), и для сбора лидов и общения с клиентами, и как онлайн-консультант. И всё это в одном окне.

2. Гибкость. Можно подключить к сервису один аккаунт, а можно пятьдесят. Сообщения можно рандомизировать до бесконечности, а чат-бот может реагировать не только на ключевые фразы, но и на их отсутствие. Отправлять можно как текстовые сообщения, так и сообщения с кнопками — а ещё медиафайлы. В общем, Вы можете настроить идеальную для себя рассылку.

3. API. Интегрируйте сервис со своей CRM-системой, чтобы автоматизировать процесс обработки заявок. Интегрируйте устройства между собой, чтобы работать в программе могли несколько менеджеров одновременно. И так далее.

4. Техподдержка. Техподдержкой занимаются сами разработчики и на большинстве тарифов есть возможность участия в закрытом Telegram-чате. То есть помощь Вы будете получать буквально из первых рук.

5. Обучение. На сайте Wapico огромная база знаний. Во-первых, Вы, конечно, найдёте тем максимально подробные инструкции по использованию сервиса от простейших действий до сборки сценариев для чат-бота. Во-вторых, там много информации и по базовому WhatsApp-маркетингу: например, Вы узнаете, как самостоятельно прогреть номер и как избежать блокировок.

Коротко о главном

Wapico — буквально как швейцарский нож, если говорить о мессенджер-маркетинге. В первую очередь это, конечно, сервис для массовых рассылок Whatsapp, но его можно использовать и для обычного общения с клиентами.

Встроенный парсер групп и форматирование номеров помогут Вам дополнить и упорядочить клиентскую базу. Автоответчик, чат-бот и интеграция с сайтом и CRM автоматизируют работу с клиентами. Возможность подключить множество номеров — причём уже прогретых — снизит риск блокировки и увеличит эффективность рассылки. И это далеко не всё, что может сервис.

Wapico предлагает целых 7 тарифов на любой кошелёк и нужды, будь Вы мастером маникюра или крупным маркетинговым агентством. Стоимость начинается от 390 рублей в месяц. Тестовый период длится неделю и позволяет отправить до 100 бесплатных сообщений — более чем достаточно для того, чтобы проверить, подходит ли Вам сервис.

Нашли ошибку в тексте? Выделите фрагмент и нажмите ctrl+enter

Несколько PHP-функций для форматирования телефонных номеров.

1

Формат +7 (xxx) xxx-xx-xx

Формат +7 (xxx) xxx-xx-xx очень распространён, но правильнее писать номера без скобок. В нормах русского языка скобки используются для поясняющей и дополняющей информации, а так как без кода оператора или города дозвониться до абонента не получится, то это уже не дополнительная информация.

function phone_format($phone) 
{
	$phone = trim($phone);

	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 	
			'+7 ($2) $3-$4', 
			'+7 ($2) $3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Тестирование и результаты

Мобильные и городские:

echo phone_format('+7 (495) 1234567');
echo phone_format('+8 (495) 123 45 67');
echo phone_format('+7(495)123-45-67');
echo phone_format('+7(495)1234567');
echo phone_format('+7 495 123-45-67');
echo phone_format('+8 495 123 45 67');
echo phone_format('+7 495 1234567');
echo phone_format('+7-495-123-45-67');
echo phone_format('84951234567');

PHP

+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67

Региональные:

echo phone_format('7 4734 12-34-56');
echo phone_format('7 4735 123-456');

PHP

+7 (4734) 12-34-56
+7 (4735) 123-456

С текстом:

echo phone_format('+7-495-123-45-67 Иван');
echo phone_format('+84951234567 доп. 123');
echo phone_format('+74951234567, +79031234567');
echo phone_format('тел. +84951234567');

PHP

+7 (495) 123-45-67 Иван
+7 (495) 123-45-67 доп. 123
+7 (495) 123-45-67, +7 (903) 123-45-67
тел. +7 (495) 123-45-67

Номера с ошибками:

echo phone_format('495 1234567');
echo phone_format('8(8001234567');
echo phone_format('8800;1234567');

PHP

495 1234567
8(8001234567
8800;1234567

2

Формат +7 xxx xxx-xx-xx

function phone_format($phone) 
{
	$phone = trim($phone);

	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 	
			'+7 $2 $3-$4', 
			'+7 $2 $3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Результат:

/* Мобильные и городские */
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67

/* Региональные */
+7 4734 12-34-56
+7 4735 123-456

/* С текстом */
+7 495 123-45-67 Иван
+7 495 123-45-67 доп. 123
+7 495 123-45-67, +7 903 123-45-67
тел. +7 495 123-45-67

/* Номера с ошибками */
495 1234567
8(8001234567
8800;1234567

3

Формат +7-xxx-xxx-xx-xx

function phone_format($phone) 
{
	$phone = trim($phone);
 
	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 	
			'+7-$2-$3-$4', 
			'+7-$2-$3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Результат:

/* Мобильные и городские */
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67

/* Региональные */
+7-4734-12-34-56
+7-4735-123-456

/* С текстом */
+7-495-123-45-67 Иван
+7-495-123-45-67 доп. 123
+7-495-123-45-67, +7 903 123-45-67
тел. +7-495-123-45-67

/* Номера с ошибками */
495 1234567
8(8001234567
8800;1234567

TEXT

Форматирование номера телефона

17.11.2019, 12:56. Показов 4225. Ответов 2


Есть задача

«Привет, если ты знаешь номер может быть написан по-разному, т. 8915 12 — 34 — 567 вот так, например номер + 7(915)123 — 45-67 может писаться, и так + 7978123456779787654321 где 79787654321 тоже номер, но какой-то рукооп написал их слитно, и теперь надо разделять… и нужно систему научить разделять их 12345 просто цифры, их учитывать не стоит, а тебе нужен номер где точно встречается 8 или 7 потом код потом 7 циферок номера «

достать из строки все номера телефонов

0_о

Добавлено через 16 минут
Вот так

Python
1
2
3
4
5
6
7
8
import re
 
text = "Привет, если ты знаешь номер может быть написан по-разному, т. 8915 12 - 34 - 567 вот так, например номер + 7(915)123 - 45-67 может писаться, и так + 7978123456779787654321 где 79787654321 тоже номер, но какой-то рукооп написал их слитно, и теперь надо разделять... и нужно систему научить разделять их 12345 просто цифры, их учитывать не стоит, а тебе нужен номер где точно встречается 8 или 7 потом код потом 7 цифер номера "
 
 
text = text.replace(' ', '').replace('-', '').replace('(', '').replace(')', '').replace('+', '')
text = re.findall('d+', text)
print(text)

[‘89151234567’, ‘79151234567’, ‘7978123456779787654321’, ‘79787654321’, ‘12345’, ‘8’, ‘7’, ‘7’]

Добавлено через 13 минут
теперь их надо отсортировать
и «длинные» разделить

Добавлено через 7 минут
Короче )

получилось =))

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import re
 
text = "Привет, если ты знаешь номер может быть написан по-разному, т. 8915 12 - 34 - 567 вот так, например номер + 7(915)123 - 45-67 может писаться, и так + 7978123456779787654321 где 79787654321 тоже номер, но какой-то рукооп написал их слитно, и теперь надо разделять... и нужно систему научить разделять их 12345 просто цифры, их учитывать не стоит, а тебе нужен номер где точно встречается 8 или 7 потом код потом 7 цифер номера "
 
 
text = text.replace(' ', '').replace('-', '').replace('(', '').replace(')', '').replace('+', '')
text = re.findall('d+', text)
print(text)
 
for x in text:
    print(len(x))
    if len(x) >= 11:
        x = [x[i:i + 11] for i in range(0, len(x), 11)]
        print(x)

Добавлено через 4 минуты
Может можно это как-то сократить?

Добавлено через 15 секунд
Может можно это как-то сократить?



0



I have been storing phone numbers as longs and I would like to simply add hyphens when printing the phone number as a string.

I tried using DecimalFormat but that doesn’t like the hyphen. Probably because it is meant for formatting decimal numbers and not longs.

long phoneFmt = 123456789L;
DecimalFormat phoneFmt = new DecimalFormat("###-###-####");
System.out.println(phoneFmt.format(phoneNum)); //doesn't work as I had hoped

Ideally, I would like to have parenthesis on the area code too.

new DecimalFormat("(###)-###-####");

What is the correct way to do this?

asked Feb 25, 2011 at 7:38

styfle's user avatar

1

You can use String.replaceFirst with regex method like

    long phoneNum = 123456789L;
    System.out.println(String.valueOf(phoneNum).replaceFirst("(\d{3})(\d{3})(\d+)", "($1)-$2-$3"));

answered Feb 25, 2011 at 9:12

hhbarriuso's user avatar

hhbarriusohhbarriuso

9765 silver badges7 bronze badges

2

To get your desired output:

long phoneFmt = 123456789L;
//get a 12 digits String, filling with left '0' (on the prefix)   
DecimalFormat phoneDecimalFmt = new DecimalFormat("0000000000");
String phoneRawString= phoneDecimalFmt.format(phoneFmt);

java.text.MessageFormat phoneMsgFmt=new java.text.MessageFormat("({0})-{1}-{2}");
    //suposing a grouping of 3-3-4
String[] phoneNumArr={phoneRawString.substring(0, 3),
          phoneRawString.substring(3,6),
          phoneRawString.substring(6)};

System.out.println(phoneMsgFmt.format(phoneNumArr));

The result at the Console looks like this:

(012)-345-6789

For storing phone numbers, you should consider using a data type other than numbers.

Community's user avatar

answered Feb 25, 2011 at 7:58

Tomas Narros's user avatar

Tomas NarrosTomas Narros

13.4k2 gold badges40 silver badges56 bronze badges

The easiest way to do this is by using the built in MaskFormatter in the javax.swing.text library.

You can do something like this :

import javax.swing.text.MaskFormatter;

String phoneMask= "###-###-####";
String phoneNumber= "123423452345";

MaskFormatter maskFormatter= new MaskFormatter(phoneMask);
maskFormatter.setValueContainsLiteralCharacters(false);
maskFormatter.valueToString(phoneNumber) ;

answered Aug 9, 2013 at 16:07

lac_dev's user avatar

lac_devlac_dev

1,27613 silver badges20 bronze badges

2

If you really need the right way then you can use Google’s recently open sourced libphonenumber

answered Feb 25, 2011 at 7:42

Aravind Yarram's user avatar

Aravind YarramAravind Yarram

78.1k45 gold badges230 silver badges321 bronze badges

2

You could also use https://github.com/googlei18n/libphonenumber. Here is an example:

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;

String s = "18005551234";
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber phoneNumber = phoneUtil.parse(s, Locale.US.getCountry());
String formatted = phoneUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL);

Here you can get the library on your classpath: http://mvnrepository.com/artifact/com.googlecode.libphonenumber/libphonenumber

answered Aug 16, 2015 at 5:45

Ondrej Kvasnovsky's user avatar

0

The worst possible solution would be:

StringBuilder sb = new StringBuilder();
long tmp = phoneFmt;
sb.append("(");
sb.append(tmp / 10000000);
tmp = tmp % 10000000;
sb.append(")-");
sb.apppend(tmp / 10000);
tmp = tmp % 10000000;
sb.append("-");
sb.append(tmp);

answered Feb 25, 2011 at 7:44

Vanya's user avatar

VanyaVanya

3,0332 gold badges17 silver badges12 bronze badges

1

This is how I ended up doing it:

private String printPhone(Long phoneNum) {
    StringBuilder sb = new StringBuilder(15);
    StringBuilder temp = new StringBuilder(phoneNum.toString());

    while (temp.length() < 10)
        temp.insert(0, "0");

    char[] chars = temp.toString().toCharArray();

    sb.append("(");
    for (int i = 0; i < chars.length; i++) {
        if (i == 3)
            sb.append(") ");
        else if (i == 6)
            sb.append("-");
        sb.append(chars[i]);
    }

    return sb.toString();
}

I understand that this does not support international numbers, but I’m not writing a «real» application so I’m not concerned about that. I only accept a 10 character long as a phone number. I just wanted to print it with some formatting.

Thanks for the responses.

answered Feb 25, 2011 at 8:03

styfle's user avatar

styflestyfle

21.2k25 gold badges87 silver badges128 bronze badges

You can implement your own method to do that for you, I recommend you to use something such as this. Using DecimalFormat and MessageFormat. With this method you can use pretty much whatever you want (String,Integer,Float,Double) and the output will be always right.

import java.text.DecimalFormat;
import java.text.MessageFormat;

/**
 * Created by Yamil Garcia Hernandez on 25/4/16.
 */

public class test {
    // Constants
    public static final DecimalFormat phoneFormatD = new DecimalFormat("0000000000");
    public static final MessageFormat phoneFormatM = new MessageFormat("({0}) {1}-{2}");

    // Example Method on a Main Class
    public static void main(String... args) {
        try {
            System.out.println(formatPhoneNumber("8091231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber("18091231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber("451231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber("11231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber("1231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber("231234"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber(""));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber(0));
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(formatPhoneNumber(8091231234f));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // Magic
    public static String formatPhoneNumber(Object phone) throws Exception {

        double p = 0;

        if (phone instanceof String)
            p = Double.valueOf((String) phone);

        if (phone instanceof Integer)
            p = (Integer) phone;

        if (phone instanceof Float)
            p = (Float) phone;

        if (phone instanceof Double)
            p = (Double) phone;

        if (p == 0 || String.valueOf(p) == "" || String.valueOf(p).length() < 7)
            throw new Exception("Paramenter is no valid");

        String fot = phoneFormatD.format(p);

        String extra = fot.length() > 10 ? fot.substring(0, fot.length() - 10) : "";
        fot = fot.length() > 10 ? fot.substring(fot.length() - 10, fot.length()) : fot;

        String[] arr = {
                (fot.charAt(0) != '0') ? fot.substring(0, 3) : (fot.charAt(1) != '0') ? fot.substring(1, 3) : fot.substring(2, 3),
                fot.substring(3, 6),
                fot.substring(6)
        };
        String r = phoneFormatM.format(arr);
        r = (r.contains("(0)")) ? r.replace("(0) ", "") : r;
        r = (extra != "") ? ("+" + extra + " " + r) : r;
        return (r);
    }
}

Result will be

(809) 123-1234
+1 (809) 123-1234
(45) 123-1234
(1) 123-1234
123-1234
023-1234
java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at java.lang.Double.valueOf(Double.java:502)
    at test.formatPhoneNumber(test.java:66)
    at test.main(test.java:45)
java.lang.Exception: Paramenter is no valid
    at test.formatPhoneNumber(test.java:78)
    at test.main(test.java:50)
(809) 123-1232

Robert's user avatar

Robert

10.1k14 gold badges65 silver badges115 bronze badges

answered Apr 25, 2016 at 15:34

Yamil García Hernández's user avatar

DecimalFormat doesn’t allow arbitrary text within the number to be formatted, just as a prefix or a suffix. So it won’t be able to help you there.

In my opinion, storing a phone number as a numeric value is wrong, entirely. What if I want to store an international number? Many countries use + to indicate a country code (e.g. +1 for USA/Canda), others use 00 (e.g. 001).

Both of those can’t really be represented in a numeric data type («Is that number 1555123 or 001555123?»)

answered Feb 25, 2011 at 7:50

Joachim Sauer's user avatar

Joachim SauerJoachim Sauer

299k57 gold badges552 silver badges611 bronze badges

2

You could use the substring and concatenation for easy formatting too.

telephoneNumber = "("+telephoneNumber.substring(0, 3)+")-"+telephoneNumber.substring(3, 6)+"-"+telephoneNumber.substring(6, 10);

But one thing to note is that you must check for the lenght of the telephone number field just to make sure that your formatting is safe.

Paul Richter's user avatar

Paul Richter

10.9k10 gold badges50 silver badges84 bronze badges

answered Feb 7, 2014 at 20:40

DiTap's user avatar

DiTapDiTap

3612 silver badges5 bronze badges

U can format any string containing non numeric characters also to your desired format use my util class to format

usage is very simple

public static void main(String[] args){
    String num = "ab12345*&67890";

    System.out.println(PhoneNumberUtil.formateToPhoneNumber(num,"(XXX)-XXX-XXXX",10));
}

output: (123)-456-7890

u can specify any foramt such as XXX-XXX-XXXX and length of the phone number , if input length is greater than specified length then string will be trimmed.

Get my class from here: https://github.com/gajeralalji/PhoneNumberUtil/blob/master/PhoneNumberUtil.java

answered Feb 26, 2016 at 11:05

Lalji Gajera's user avatar

Lalji GajeraLalji Gajera

4611 gold badge5 silver badges10 bronze badges

Pattern phoneNumber = Pattern.compile("(\d{3})(\d{3})(\d{4})");
// ...
Matcher matcher = phoneNumber(numberAsLineOf10Symbols);
if (matcher.matches) {
    return "(" + matcher.group(1) + ")-" +matcher.group(2) + "-" + matcher.group(3);
}

xlm's user avatar

xlm

6,41414 gold badges54 silver badges54 bronze badges

answered Jul 13, 2017 at 8:31

Alexey Smirnov's user avatar

I’d have thought you need to use a MessageFormat rather than DecimalFormat. That should be more flexible.

answered Feb 25, 2011 at 7:45

Richard Miskin's user avatar

String formatterPhone = String.format(«%s-%s-%s», phoneNumber.substring(0, 3), phoneNumber.substring(3, 6), phoneNumber.substring(6, 10));

answered Jun 18, 2014 at 14:41

user3753036's user avatar

1

Using StringBuilder for performance.

long number = 12345678L;

System.out.println(getPhoneFormat(String.valueOf(number)));

public static String getPhoneFormat(String number)
{
    if (number == null || number.isEmpty() || number.length() < 6 || number.length() > 15)
    {
        return number;
    }

    return new StringBuilder("(").append(number.substring(0, 3))
            .append(") ").append(number.substring(3, 6))
            .append("-").append(number.substring(6))
            .toString();

}

answered Oct 29, 2018 at 13:42

trilogy's user avatar

trilogytrilogy

1,59814 silver badges31 bronze badges

Kotlin

val number = 088899998888

val phone = number.phoneFormatter()

fun String.phoneFormatter(): String { return this.replace("\B(?=(\d{4})+(?!\d))".toRegex(), "-") }

The result will be 0888-9999-8888

Roohollah Etemadi's user avatar

answered Jul 16, 2020 at 4:09

Lukmanul Hakim's user avatar

I used this one

String columValue = «1234567890

String number = columValue.replaceFirst(«(d{3})(d{3})(d+)», «($1) $2-$3»);

answered Mar 6, 2021 at 2:59

Rajitha Bhanuka's user avatar

Понравилась статья? Поделить с друзьями:
  • Ванино пристава номер телефона
  • Ванино паромная переправа номер телефона
  • Ванино парикмахерская валентина номер телефона
  • Ванино номер телефона роспотребнадзора
  • Ванильное небо ярославль номер телефона