2009-10-06 6 views
0

Для достойной и стандартизованной функции 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. 

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

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

+0

несколько комично, skype firefox addon преобразует все эти телефонные номера в вид виджетов. –

+1

В чем вопрос? Вы ищете стандарт для представления телефонных номеров (ответ здесь: http://www.itu.int/rec/T-REC-E.123-200102-I/e)?Вы боретесь с регулярными выражениями для преобразования строки в другую? Вы ищете алгоритм? – mouviciel

+0

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

ответ

3

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

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

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

+0

Спасибо. Я все понял, что разные страны имеют разные варианты форматирования. Хотя в конечном итоге я хочу реализовать это, на данный момент я ищу хороший способ переформатировать строку ввода пользователя в этот формат: +31 (0) 61 234 5678; Стандарт принят здесь :) – blub

3

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

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

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

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

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

+0

Ой, черт возьми, есть больше проблем с этим вопросом, чем я заранее думал, что будет. – blub

1

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

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

+0

Это была первая стандартизация i personnaly. Код префикса/области всегда состоит из 3 цифр: 043 (маастрихт), 06x (мобильный), 047 (5) roermond. – blub

+0

Голландским пользователям это не нравится! Сканирование быстрой визитной карточки показало, что только 6 из 85 человек это делают. –

+0

Я уже вернул его; Даже я сам не мог привыкнуть к его обозначениям :) – blub

Смежные вопросы