Форматирование номера телефона - PullRequest
0 голосов
/ 06 октября 2009

Для приличной и стандартизированной функции php я хочу отформатировать введенную пользователем строку в std. формат международного номера телефона. Строка будет отделена от других символов в виде цифр и знаков +. Все пробелы будут удалены. После этого я хочу отформатировать различные строки в стандартизированной форме:

+310612345678  -> +31 (0)61 234 5678
00310612345678  -> +31 (0)61 234 5678

+31612345678   -> +31 (0)61 234 5678 
//add a leading zero between brackets (0))
0031612345678  -> +31 (0)61 234 5678

06 12345678   -> +31 (0)61 234 5678 
//When no country code is given (no 00xx or +xx) than add the dutch one.

Это функция, которая у меня уже есть:

function formatPhoneNumber($num){
 //delete everything except digits and +
  $number = preg_replace('/[^\d|\+]/', '', $number);

 if(substr($number,0,1) == '+' || substr($number, 0,2) == 00){
  //
 }else{
  $number = "+31".$number;
 }

 /////////
 // formatting as mentioned above
 /////////


 return $num
}

Я ищу алгоритм для форматирования различных способов ввода телефонных номеров в один формат: +31 (0) 61 2345678

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

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

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

  • Кроме того, вы не можете автоматически предполагать, что начальный ноль в коде города является избыточным. В некоторых странах, таких как Италия, ведущий ноль должен использоваться даже в международных звонках, т.е. е. если вы хотите позвонить в Милан по номеру 02 123456 из Нидерландов, вам нужно позвонить +39 02 123456 вместо +39 2 123456.

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

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

3 голосов
/ 06 октября 2009

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

например. в Великобритании у нас +44 (0) 20 1234 1234 для стационарных телефонов и +44 (0) 7700 123456 для мобильных телефонов.

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

1 голос
/ 06 октября 2009

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

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

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