$phoneUtil = PhoneNumberUtil::getInstance();
$number = $phoneUtil->parse("16502530000", "US");
$nationalSignificantNumber = $phoneUtil->getNationalSignificantNumber($number);
$areaCodeLength = $phoneUtil->getLengthOfGeographicalAreaCode($number);
if ($areaCodeLength > 0)
{
$areaCode = substr($nationalSignificantNumber, 0,$areaCodeLength);
$subscriberNumber = substr($nationalSignificantNumber, $areaCodeLength);
} else {
$areaCode = "";
$subscriberNumber = $nationalSignificantNumber;
}
N.B.: area code is a very ambiguous concept, so the I18N team generally recommends against
using it for most purposes, but recommends using the more general {@code nationalNumber}
instead. Read the following carefully before deciding to use this method:
- geographical area codes change over time, and this method honors those changes; therefore, it doesn't guarantee the stability of the result it produces.
- subscriber numbers may not be diallable from all devices (notably mobile devices, which typically requires the full national_number to be dialled in most regions).
- most non-geographical numbers have no area codes, including numbers from non-geographical entities
- some geographical numbers have no area codes.
public getLengthOfGeographicalAreaCode ( |
||
$number | PhoneNumber object for which clients want to know the length of the area code. | |
return | integer | the length of area code of the PhoneNumber object passed in. |
public function testGetLengthOfGeographicalAreaCode() { // Google MTV, which has area code "650". $this->assertEquals(3, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$usNumber)); // A North America toll-free number, which has no area code. $this->assertEquals(0, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$usTollFree)); // Google London, which has area code "20". $this->assertEquals(2, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$gbNumber)); // A UK mobile phone, which has no area code. $this->assertEquals(0, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$gbMobile)); // Google Buenos Aires, which has area code "11". $this->assertEquals(2, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$arNumber)); // Google Sydney, which has area code "2". $this->assertEquals(1, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$auNumber)); // Google Singapore. Singapore has no area code and no national prefix. $this->assertEquals(0, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$sgNumber)); // An invalid US number (1 digit shorter), which has no area code. $this->assertEquals(0, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$usShortByOneNumber)); // An international toll free number, which has no area code. $this->assertEquals(0, $this->phoneUtil->getLengthOfGeographicalAreaCode(self::$internationalTollFree)); }