Skip to content
This repository has been archived by the owner on Aug 21, 2018. It is now read-only.

Not outputing PhoneNumberFormat::NATIONAL correctly for some countries #16

Open
michaelmcandrew opened this issue Apr 11, 2013 · 1 comment

Comments

@michaelmcandrew
Copy link

see also / related: #7

I'm using php 5.4.6.

I wrote the following test script to exercise the national formatting. It failed for CH and GB but not FR.

It looks like PhoneNumberUtil::chooseFormattingPatternForNumber() can't find a valid formatting pattern in these cases (I did not investigate why).

<?php
use com\google\i18n\phonenumbers\PhoneNumberUtil;
use com\google\i18n\phonenumbers\PhoneNumberFormat;
use com\google\i18n\phonenumbers\NumberParseException;
require_once 'PhoneNumberUtil.php';

$inputs = array(
//  array('4154545454', 'US'), // This breaks things.  Can be fixed with https://github.com/davideme/libphonenumber-for-PHP/pull/15
  array('0454545454', 'FR'),
  array('07454545454', 'GB'),
  array('+41444545454', 'CH')
);

foreach ($inputs as $input){
  testFormatting($input);
}

function testFormatting($input){ 
  $number = $input[0]; 
  $countryCode = $input[1]; 

  $phoneUtil = PhoneNumberUtil::getInstance(); 

  $numberObject = $phoneUtil->parseAndKeepRawInput($number, $countryCode);  
  $nationalNumber = $phoneUtil->format($numberObject, PhoneNumberFormat::NATIONAL); 
  $internationalNumber = $phoneUtil->format($numberObject, PhoneNumberFormat::INTERNATIONAL); 

  var_dump($numberObject); 
  var_dump($number); 
  var_dump($nationalNumber); 
  var_dump($internationalNumber); 
}

Output:

class com\google\i18n\phonenumbers\PhoneNumber#2 (7) {
  private $countryCode =>
  int(33)
  private $nationalNumber =>
  double(454545454)
  private $extension =>
  NULL
  private $italianLeadingZero =>
  NULL
  private $rawInput =>
  string(10) "0454545454"
  private $countryCodeSource =>
  int(3)
  private $preferredDomesticCarrierCode =>
  string(0) ""
}
string(10) "0454545454"
string(14) "04 54 54 54 54"
string(17) "+33 4 54 54 54 54"
class com\google\i18n\phonenumbers\PhoneNumber#2 (7) {
  private $countryCode =>
  int(44)
  private $nationalNumber =>
  double(7454545454)
  private $extension =>
  NULL
  private $italianLeadingZero =>
  NULL
  private $rawInput =>
  string(11) "07454545454"
  private $countryCodeSource =>
  int(3)
  private $preferredDomesticCarrierCode =>
  string(0) ""
}
string(11) "07454545454"
string(10) "7454545454"
string(14) "+44 7454545454"
class com\google\i18n\phonenumbers\PhoneNumber#2 (7) {
  private $countryCode =>
  int(41)
  private $nationalNumber =>
  double(444545454)
  private $extension =>
  NULL
  private $italianLeadingZero =>
  NULL
  private $rawInput =>
  string(12) "+41444545454"
  private $countryCodeSource =>
  int(0)
  private $preferredDomesticCarrierCode =>
  string(0) ""
}
string(12) "+41444545454"
string(9) "444545454"
string(13) "+41 444545454"

In the UK example, I would have expected something like 07454 545454

@kokone
Copy link

kokone commented Apr 11, 2013

I had the same problem for Dutch (NL) numbers, and found out why: the whitespace in the PhoneNumberMetaData files' regex patterns cause the regex not to work. Either by removing it in the metadata files or by removing whitespace when you're getting the data you can fix it.

Sadly, I haven't had the time to make such a fix other than a quick hack in my own project.

kitbs added a commit to kbsjunk/libphonenumber-for-PHP that referenced this issue Jun 10, 2013
kscott pushed a commit to churchcommunitybuilder/libphonenumber-for-PHP that referenced this issue Dec 6, 2013
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants