formatOutOfCountryKeepingAlphaChars() public method

Note that in this version, if the number was entered originally using alpha characters and this version of the number is stored in raw_input, this representation of the number will be used rather than the digit representation. Grouping information, as specified by characters such as "-" and " ", will be retained.

Caveats:

  • This will not produce good results if the country calling code is both present in the raw input _and_ is the start of the national number. This is not a problem in the regions which typically use alpha numbers.
  • This will also not produce good results if the raw input has any grouping information within the first three digits of the national number, and if the function needs to strip preceding digits/words in the raw input before these digits. Normally people group the first three digits together so this is not a huge problem - and will be fixed if it proves to be so.
public formatOutOfCountryKeepingAlphaChars ( PhoneNumber $number, String $regionCallingFrom ) : String
$number PhoneNumber the phone number that needs to be formatted
$regionCallingFrom String the region where the call is being placed
return String the formatted phone number
 public function testFormatOutOfCountryKeepingAlphaChars()
 {
     $alphaNumericNumber = new PhoneNumber();
     $alphaNumericNumber->setCountryCode(1)->setNationalNumber(8007493524)->setRawInput("1800 six-flag");
     $this->assertEquals("0011 1 800 SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     $alphaNumericNumber->setRawInput("1-800-SIX-flag");
     $this->assertEquals("0011 1 800-SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     $alphaNumericNumber->setRawInput("Call us from UK: 00 1 800 SIX-flag");
     $this->assertEquals("0011 1 800 SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     $alphaNumericNumber->setRawInput("800 SIX-flag");
     $this->assertEquals("0011 1 800 SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     // Formatting from within the NANPA region.
     $this->assertEquals("1 800 SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::US));
     $this->assertEquals("1 800 SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::BS));
     // Testing that if the raw input doesn't exist, it is formatted using
     // formatOutOfCountryCallingNumber.
     $alphaNumericNumber->clearRawInput();
     $this->assertEquals("00 1 800 749 3524", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::DE));
     // Testing AU alpha number formatted from Australia.
     $alphaNumericNumber->setCountryCode(61)->setNationalNumber(827493524)->setRawInput("+61 82749-FLAG");
     // This number should have the national prefix fixed.
     $this->assertEquals("082749-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     $alphaNumericNumber->setRawInput("082749-FLAG");
     $this->assertEquals("082749-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     $alphaNumericNumber->setNationalNumber(18007493524)->setRawInput("1-800-SIX-flag");
     // This number should not have the national prefix prefixed, in accordance with the override for
     // this specific formatting rule.
     $this->assertEquals("1-800-SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AU));
     // The metadata should not be permanently changed, since we copied it before modifying patterns.
     // Here we check this.
     $alphaNumericNumber->setNationalNumber(1800749352);
     $this->assertEquals("1800 749 352", $this->phoneUtil->formatOutOfCountryCallingNumber($alphaNumericNumber, RegionCode::AU));
     // Testing a region with multiple international prefixes.
     $this->assertEquals("+61 1-800-SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::SG));
     // Testing the case of calling from a non-supported region.
     $this->assertEquals("+61 1-800-SIX-FLAG", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AQ));
     // Testing the case with an invalid country calling code.
     $alphaNumericNumber->setCountryCode(0)->setNationalNumber(18007493524)->setRawInput("1-800-SIX-flag");
     // Uses the raw input only.
     $this->assertEquals("1-800-SIX-flag", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::DE));
     // Testing the case of an invalid alpha number.
     $alphaNumericNumber->setCountryCode(1)->setNationalNumber(80749)->setRawInput("180-SIX");
     // No country-code stripping can be done.
     $this->assertEquals("00 1 180-SIX", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::DE));
     // Testing the case of calling from a non-supported region.
     $alphaNumericNumber->setCountryCode(1)->setNationalNumber(80749)->setRawInput("180-SIX");
     // No country-code stripping can be done since the number is invalid.
     $this->assertEquals("+1 180-SIX", $this->phoneUtil->formatOutOfCountryKeepingAlphaChars($alphaNumericNumber, RegionCode::AQ));
 }