2015-02-06 4 views
0

Есть ли функция или простой способ разбить телефонные номера на определенный формат?Зачистка Phonenumber (мобильный)

Ввод может быть несколько (мобильные, различные коды стран)

возможно

+4917112345678 
+49171/12345678 
0049171 12345678 

или, возможно, из другой страны

004312345678 
+44... 

Im делает

$mobile_new = preg_replace("/[^0-9]/","",$mobile); 

в убить все остальное, чем число, потому что оно мне нужно в формате 49171 (без + или 00 в начале), но мне нужно обработать, если сначала вставлен 00, или кто-то использует +49 (0) 171 или или вводит 0171 (должно быть 49171.

поэтому первые числа ВСЕГДА должны быть загородными без +/00 и без каких-либо (0) между ними.

может кто-нибудь дать мне совет о том, как это решить?

+0

Если пользователь вводит '' 0171 ..... или что-нибудь еще не начинается с '+' или '00' вы можете только догадываться, что бы префикс конкретной страны. Или вы хотите сделать «49» по умолчанию для этого случая? –

+0

Правильно. Я собираюсь добавить выпадающее меню для CC, я думаю. – Sili

ответ

0

Вы можете использовать

(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\) 

соответствовать большинство ваших дел и просто заменить их ничем.Например:

$mobile = "+4917112345678"; 
$mobile_new = preg_replace("/(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)/","",$mobile); 
echo $mobile_new; 
//output: 4917112345678 

regex101 Demo

Пояснение:

Я использования OR здесь, соответствие каждого из случаев один на один:

  1. (?:^(?:00|\+|\+\d{2})) спичек 00, + или +, за которым следуют два номера в начале строки
  2. \/ соответствует / где-нибудь в строке
  3. \s соответствует whitspace где-нибудь в строке (она совпадает с символом новой строки в regex101 демо, но я полагаю, вы подходите каждый номер сам по себе)
  4. \(\d\) совпадает с номером заключен в квадратных скобках в любом месте строки

единственный случай не распространяется на регулярном выражении является формат ввод 01712345678, как вы можете взять только догадываться, что конкретный код страны может быть. Если вы хотите быть 49 по умолчанию, то просто замените каждый вход, начиная с одного 0 с 49:

$mobile = "01712345678"; 
$mobile_new = preg_replace("/^0/","49",$mobile); 
echo $mobile_new; 
//output: 491712345678 
+0

Работаю отлично! И ваше право .. cc необходим, чтобы скрипт работал правильно, поэтому, если кто-то забывает cc, никаких действий не требуется :) – Sili

0

Эта модель (49)\(?([0-9]{3})[\)\s\/]?([0-9]{8}) разделит число на три группы:

  • 49 - код страны
  • 3 цифры - код области
  • 8 цифр - номер

После матча вы можете построить чистый номер, просто конкатенирующий их на \1\2\3.

Демо: https://regex101.com/r/tE5iY3/1

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

0

Я рекомендую взглянуть на LibPhoneNumber на Google и порт для PHP. Он имеет поддержку для многих форматов и стран и находится в хорошем состоянии. Лучше не разбираться в этом.

https://github.com/giggsey/libphonenumber-for-php

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); 
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US"); 
+0

выглядит красиво! Я собираюсь реализовать это в более позднем обновлении! СПАСИБО! – Sili