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

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

Я работаю над SMS app и необходимо иметь возможность конвертировать номер телефона отправителя из +11234567890 to 123-456-7890 таким образом, его можно сравнить с записями в база данных MySQL.

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

как бы я пойти об этом с РНР?

17 ответов

это форматер телефона США, который работает на большем количестве версий чисел, чем любой из текущих ответов.

и вот разбивка регулярного выражения:

обновлено: 11 марта 2015 использовать <0,7>вместо

эта функция будет форматировать международные (10 + цифр), немеждународные (10 цифр) или старые школьные (7 цифр) телефонные номера. Любые числа, кроме 10+, 10 или 7 цифр, останутся неформатированными.

предполагая, что ваши телефонные номера всегда имеют этот точный формат, вы можете использовать этот фрагмент:

номера телефонов трудно. Для более надежного, международного решения я бы рекомендовал это ухоженный PHP порт от Google libphonenumber библиотека.

вы получите следующий результат:

Я бы рекомендовал использовать E164 формат для повторяющихся проверок. Вы также можете проверить, является ли номер фактически мобильным номером или нет (используя PhoneNumberUtil::getNumberType() ), или это даже номер США (используя PhoneNumberUtil::getRegionCodeForNumber() ).

в качестве бонуса, библиотека может обрабатывать почти любой вход. Если вы, например, решите запустить 1-800-JETBLUE через код выше, вы получите

он работает так же хорошо для других стран, чем США. Просто используйте другой код страны ISO в

вот мое решение только для США, с кодом области в качестве дополнительного компонента, необходимым разделителем для расширения и комментариями regex:

и вот сценарий, чтобы проверить его:

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

должен это сделать.

вот простая функция для форматирования телефонных номеров с 7 до 10 цифр по-европейски (или по-шведски?) манера:

попробуйте что-то вроде:

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

это занимает 7, 10 и 11 цифр, удаляет дополнительные символы и добавляет тире, идя справа налево через строку. измените тире на пробел или точку.

кажется, я его починил. Работа для текущих входных файлов и имеют следующие 2 функции, чтобы сделать это!

format_phone_number функции:

validate_phone_number функции:

обратите внимание, что у меня это в классе lib, поэтому, таким образом, вызов «self::validate_phone_number» из первой функции/метода.

строка уведомления # 32 функции «validate_phone_number», где I добавлено:

чтобы получить мне ложное возвращение, необходимое, если не действительный номер телефона.

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

также я прокомментировал логику «расширения», поскольку я постоянно получал от нее ошибки, видя, что у меня нет этой информации в моих данных.

Источник

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

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

Для начала приведу обзор найденных решений. Тем, кому это не интересно, рекомендую прокрутить ниже до заголовка «Форматы телефонных номеров» — там уже представлен мой вариант разбора номера с ссылкой на код.

Всеуничтожающий примитив

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

Форматирование с помощью sscanf

Не смотря на простое решение, эта функция уже умеет форматировать номера длиной 7, 10 и более цифр, но попадись ей номер из российской глубинки, она подавится и выдаст ошибочный результат.

Symfony, lib/helpers/PhoneHelper.php, format_phone

Функция позволяет не только форматировать в XXX-XXXX, (XXX) XXX-XXXX и X (XXX) XXX-XXXX, но и конвертировать номера, написанные цифрами. Ограниченность функции в форматировании номеров длиной 7, 10 и 11 символов никак не подходит.

Форматы телефонных номеров

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

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

На самом деле, все оказалось не так страшно. В каждой стране можно разделить все коды городов на две части: на те, что в большинстве своем совпадают по длине, и все остальные. Этого достаточно, чтобы резко сократить область перебора кодов при сравнении. Т.е. можно создать массив из данных по каждой стране вида:

// тесты
echo phone( «+38 (044) 226-22-04» ). «
» ;
echo phone( «0038 (044) 226-22-04» ). «
» ;
echo phone( «+79263874814» ). «
» ;
echo phone( «4816145» ). «
» ;
echo phone( «+44 (0) 870 770 5370» ). «
» ;
echo phone( «0044 (0) 870 770 5370» ). «
» ;
echo phone( «+436764505509» ). «
» ;
echo phone( «(+38-048) 784-15-46 » ). «
» ;
echo phone( «(38-057) 706-34-03 » ). «
» ;
echo phone( «+38 (044) 244 12 01 » ). «
» ;
?>

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

Самое интересное

Используя информацию с сайтов:
http://www.mtt.ru/info/def/index.wbp
http://www.hella.ru/code/codeuro.htm
http://www.scross.ru/guide/phone-global/
я собрал массив данных по всем представленным странам, включая города-исключения, флаги zeroHack, а также коды мобильных сетей. Код можно загрузить здесь.

Быстродействие

Вопреки всем самым пессимистичным ожиданиям, код отрабатывает 10.000 номеров менее чем за 2 секунды.

Источник

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

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

Как мне это сделать с помощью PHP?

Это форматировщик телефонов в США, который работает с большим количеством версий чисел, чем любой из текущих ответов.

А вот разбивка регулярного выражения:

Обновлено: 11 марта 2015 г. для использования <0,7>вместо

Эта функция форматирует международные (10+ цифр), немеждународные (10-значные) или старые (7-значные) телефонные номера. Любые числа, кроме 10+, 10 или 7 цифр, останутся неформатированными.

Предполагая, что ваши номера телефонов всегда имеют именно такой формат, вы можете использовать этот фрагмент:

вы получите следующий результат:

Я бы рекомендовал использовать этот E164 формат для повторяющихся проверок. Вы также можете проверить, действительно ли это номер мобильного телефона (с использованием PhoneNumberUtil::getNumberType() ) или даже номер в США (с использованием PhoneNumberUtil::getRegionCodeForNumber() ).

В качестве бонуса библиотека может обрабатывать практически любой ввод. Если вы, например, решите запустить 1-800-JETBLUE приведенный выше код, вы получите

Вот мое решение для США, с кодом области в качестве необязательного компонента, обязательным разделителем для расширения и комментариями к регулярному выражению:

А вот сценарий для проверки:

Вот простая функция для форматирования телефонных номеров от 7 до 10 цифр в более европейской (или шведской?) Манере:

Не изобретайте велосипед! Импортируйте эту удивительную библиотеку:
https://github.com/giggsey/libphonenumber-for-php

Он основан на библиотеке Google для анализа, форматирования и проверки международных телефонных номеров: https://github.com/google/libphonenumber

Я вижу, что это возможно, используя либо какое-то регулярное выражение, либо несколько вызовов substr (при условии, что ввод всегда имеет этот формат и не меняет длину и т. Д.)

должен это сделать.

Это быстрее, чем RegEx.

Попробуйте что-нибудь вроде:

Думаю, я исправил. Работаем с текущими входными файлами и выполняем следующие 2 функции!

функция format_phone_number:

функция validate_phone_number:

Заметьте, у меня это есть в классе lib, поэтому вызов self :: validate_phone_number из первой функции / метода.

Обратите внимание на строку № 32 функции «validate_phone_number», где я добавил:

чтобы получить ложный возврат, если не действительный номер телефона.

Все еще нужно проверить это на большем количестве данных, но работаю с текущими данными, с текущим форматом, и я использую стиль «8» для этого конкретного пакета данных.

Также я прокомментировал логику «расширения», поскольку я постоянно получал от нее ошибки, видя, что у меня нет такой информации в моих данных.

это занимает 7, 10 и 11 цифр, удаляет дополнительные символы и добавляет тире, перемещаясь справа налево по строке. замените тире на пробел или точку.

Я использовал аналогичную функцию для форматирования номеров телефонов в Австралии.

Обратите внимание, что с точки зрения хранения номера телефона:

Телефонные Форматы Соединенного Королевства

Для приложения, которое я разработал, я обнаружил, что люди вводили свой номер телефона «правильно» в удобочитаемой форме, но вставляли различные случайные символы, такие как «-» / «+44» и т. Д. Проблема заключалась в том, что облачное приложение, которое нужно было поговорить с довольно конкретным о формате. Вместо того, чтобы использовать регулярное выражение (что может расстраивать пользователя), я создал класс объекта, который обрабатывает введенное число в правильный формат перед обработкой модулем постоянства.

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

+441234567890 производит (01234) 567 890
02012345678 производит (020) 1234 5678
1923123456 производит (01923) 123 456
01923123456 производит (01923) 123 456
01923 hello this is text123456 производит (01923) 123 456

Я уверен, что есть более эффективные решения, но это оказалось чрезвычайно надежным. Можно легко разместить больше форматов, добавив в конце функцию teleNum.

Процедура вызывается из вызывающего скрипта таким образом

Источник

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

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

Как мне сделать это с помощью PHP?

20 ответов

Это форматировщик телефонов в США, который работает с большим количеством версий чисел, чем любой из текущих ответов.

А вот разбивка регулярного выражения:

Обновлено: 11 марта 2015 г. для использования <0,7>вместо <,7>.

Эта функция форматирует международные (10+ цифр), немеждународные (10-значные) или старые (7-значные) телефонные номера. Любые числа, кроме 10+, 10 или 7 цифр, останутся неформатированными.

Предполагая, что ваши номера телефонов всегда имеют этот точный формат, вы можете использовать этот фрагмент:

С телефонными номерами сложно. Для более надежного международного решения я бы порекомендовал этот хорошо поддерживаемый PHP порт библиотеки Google libphonenumber.

Вы получите следующий результат:

Я бы рекомендовал использовать формат E164 для повторяющихся проверок. Вы также можете проверить, действительно ли это номер мобильного телефона (с помощью PhoneNumberUtil::getNumberType() ) или даже номер в США (с помощью PhoneNumberUtil::getRegionCodeForNumber() ).

В качестве бонуса библиотека может обрабатывать практически любой ввод. Если вы, например, решите запустить 1-800-JETBLUE через указанный выше код, вы получите

Вот мое решение только для США с кодом области в качестве необязательного компонента, обязательным разделителем для расширения и комментариями к регулярному выражению:

А вот сценарий для проверки:

Это быстрее, чем RegEx.

Вот простая функция для форматирования телефонных номеров, состоящих из 7-10 цифр, в более европейской (или шведской?) Манере:

Не изобретайте велосипед! Импортируйте эту замечательную библиотеку:
https://github.com/giggsey/libphonenumber-for-php

Он основан на библиотеке Google для синтаксического анализа, форматирования и проверки международных телефонных номеров: https://github.com/google/libphonenumber

Функция sscanf принимает в качестве второго параметра строку формата, сообщающую ей, как интерпретировать символы из первой строки. В данном случае это означает 2 символа ( %2c ), 3 символа, 3 символа, 4 символа.

Я использовал аналогичную функцию для форматирования австралийских телефонных номеров.

Обратите внимание, что с точки зрения хранения номера телефона:

Я вижу, что это возможно с использованием либо некоторого регулярного выражения, либо нескольких вызовов substr (при условии, что ввод всегда имеет этот формат и не меняет длину и т. Д.)

Должен это сделать.

Попробуйте что-нибудь вроде:

Думаю, я исправил. Работаем с текущими входными файлами и выполняем следующие 2 функции!

функция format_phone_number:

функция validate_phone_number:

Заметьте, у меня это есть в классе lib, поэтому вызов self :: validate_phone_number из первой функции / метода.

Обратите внимание на строку № 32 функции «validate_phone_number», где я добавил:

Чтобы получить ложный возврат, если не действительный номер телефона.

Все еще нужно проверить это на большем количестве данных, но работаю с текущими данными, с текущим форматом, и я использую стиль «8» для этого конкретного пакета данных.

Также я закомментировал логику «расширения», поскольку я постоянно получал от нее ошибки, видя, что у меня нет такой информации в моих данных.

Это занимает 7, 10 и 11 цифр, удаляет дополнительные символы и добавляет тире путем перехода справа налево по строке. замените тире на пробел или точку.

Я знаю, что OP запрашивает формат 123-456-7890, но на основе Ответ Джона Дула, я изменил его, чтобы вернуть номер телефона в формате скобок, например (123) 456-7890. Этот обрабатывает только 7- и 10-значные числа.

Телефонные Форматы Соединенного Королевства

Для приложения, которое я разработал, я обнаружил, что люди вводили свой номер телефона «правильно» из удобочитаемой формы, но вставляли различные случайные символы, такие как «-» / «+44» и т. Д. Проблема заключалась в том, что облачное приложение, которое нужно было поговорить с довольно конкретным о формате. Вместо того, чтобы использовать регулярное выражение (что может расстраивать пользователя), я создал класс объекта, который обрабатывает введенное число в правильный формат перед обработкой модулем постоянства.

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

+441234567890 производит (01234) 567 890
02012345678 производит (020) 1234 5678
1923123456 производит (01923) 123 456
01923123456 производит (01923) 123 456
01923 hello this is text123456 производит (01923) 123 456

Я уверен, что есть более эффективные решения, но это оказалось чрезвычайно надежным. Можно легко разместить больше форматов, добавив в конце функцию teleNum.

Процедура вызывается из вызывающего скрипта таким образом

Источник

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

При условии что пользователь может сам поставить пробелы не там где нужно, или поставить где-то тире или скобки. При этом «+» в начале оставить (если пользователь его вводил).

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проверка номера телефона российских операторов
Как мне на php проверить что телефон содержит числа российских операторов префикс я имею ввиду.

Регулярное выражение для ввода номера телефона
Всем привет, подскажите пожалуйста регулярное выражение, которое разрешает только цифры и знак +.

Форматирование номера телефона phpВывод номера телефона из текста
Доброе время суток. Заранее извиняюсь если тема повторяется, но в поиске я ответа так и не нашел.

Вывод номера телефона в виде Skype
Привет всем!Извините если «не угадал» с разделом, вопрос такой: У меня на сайте идёт вывод.

Лучше изначально определиться с форматом номера телефона и требовать от пользователя чтобы он указывал номер именно в этом формате.
Для этого можно использовать плагины:
https://github.com/igorescobar/jQuery-Mask-Plugin
https://github.com/digitalBush/jquery.maskedinput

А на стороне сервера просто проверять на соответствие данному формату.

OrionIX, можно решить с помощью регулярных выражений.

Добавлено через 36 минут

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Валидация номера телефона
кто подскажет ркгулярку, чтобы номер телефона можно было воодить только в таком формате (###).

Форматирование номера телефона phpПроверка длины номера телефона
Уважаемые форумчане! Возникла трудность с обработчиком формы, поиск не дал результатов или я их не.

Парсинг номера телефона с событием
Здраствуйте. Я новичёк в парсинге и решил написать простой код для парсинга номера телефона со.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *