2013-02-26 5 views
0

Я ищу простое регулярное выражение для преобразования чисел в Великобритании (44) и Индии (91) в действительный международный формат с использованием PHP. Форматы, необходимые являются:форматирование локального мобильного телефона на международный php

447856555333 (for uk mobile numbers) 
919876543456 (for indian mobile numbers) 

мне нужно регулярное выражение, которое будет принимать и форматировать следующие варианты:

1) 07856555333 
2) 0785 6555333 
3) 0785 655 5333 
4) 0785-655-5333 
5) 00447856555333 
6) 0044785 6555333 
7) 0044785 655 5333 
8) 0044785-655-5333 
9) 00447856555333 
10) +447856555333 
11) +44785 6555333 
12) +44785 655 5333 
13) +44785-655-5333 
14) +919876543456 
15) 00919876543456 

Любая помощь будет высоко ценится.

ОБНОВЛЕНИЕ: Основываясь на ответе ниже, я немного изменил код, и он работает очень хорошо. Это не пуленепробиваемые, но охватывает большинство популярных форматов:

public static function formatMobile($mobile) { 
     $locale = '44'; //need to update this 
     $sms_country_codes = Config::get('sms_country_codes'); 

     //lose any non numeric characters 
     $numeric_p_number = preg_replace("#[^0-9]+#", "", $mobile); 
     //remove leading zeros 
     $numeric_p_number = preg_replace("#^[0]*#", "", $numeric_p_number); 
     //get first 2 digits 
     $f2digit = substr($numeric_p_number, 0,2); 

     if(strlen($numeric_p_number) == 12) { 
      if(in_array($f2digit, $sms_country_codes)) { 
       //no looks ok 
      } 
      else { 
       return ""; //is correct length but missing country code so must be invalid! 
      } 
     } 
     else { 
      if(strlen($locale . $numeric_p_number) == 12 && !(in_array($f2digit, $sms_country_codes))) { 
       $numeric_p_number = $locale . $numeric_p_number; 
       //the number is ok after adding the country prefix 
      } else { 
       //something is missing from here 
       return ""; 
      } 
     } 

     return $numeric_p_number; 
    } 
+0

Как вы знаете, если «07856555333» является английский, или индийский номер? – stema

+0

, мы можем идентифицировать на основе языкового стандарта, то есть если пользователь отправляет свой номер телефона на наш веб-сайт .co.uk или на наш веб-сайт .co.in – user1746582

ответ

1

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

$locale = "your_locale_prefix"; 
    $valid_codes = array("44","91"); 
    //loose any non numeric characters 
    $numeric_p_number = preg_replace("#[^0-9]+#", "", $phone_number); 
    //remove leading zeros 
    $numeric_p_number = preg_replace("#^[0]*#", "", $numeric_p_number); 
    //get first 2 digits 
    $f2digit = substr($numeric_p_number, 0,2); 
    if(in_array($f2digit, $valid_codes) && strlen($numeric_p_number) == 12){ 
     //code is ok 
    } else { 
     if(strlen($locale . $numeric_p_number) == 12) { 
      //the number is ok after adding the country prefix 
     } else { 
      //something is missing from here 
     } 
    } 
+0

, спасибо большое. Я попробую это в ближайшее время и дам вам знать, как это происходит :) – user1746582

+0

Просто попробовал, и он отлично работает. Если ничего не возвращается, то это недействительно. Я бы +2, если бы мог :-) – user1746582

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