libphonenumber\PhoneNumberUtil::getLengthOfGeographicalAreaCode PHP Method

getLengthOfGeographicalAreaCode() public method

$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 ( PhoneNumber $number ) : integer
$number PhoneNumber 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 getLengthOfGeographicalAreaCode(PhoneNumber $number)
    {
        $metadata = $this->getMetadataForRegion($this->getRegionCodeForNumber($number));
        if ($metadata === null) {
            return 0;
        }
        // If a country doesn't use a national prefix, and this number doesn't have an Italian leading
        // zero, we assume it is a closed dialling plan with no area codes.
        if (!$metadata->hasNationalPrefix() && !$number->isItalianLeadingZero()) {
            return 0;
        }
        $type = $this->getNumberType($number);
        $countryCallingCode = $number->getCountryCode();
        if ($type === PhoneNumberType::MOBILE && in_array($countryCallingCode, self::$GEO_MOBILE_COUNTRIES_WITHOUT_MOBILE_AREA_CODES)) {
            return 0;
        }
        if (!$this->isNumberGeographical($type, $countryCallingCode)) {
            return 0;
        }
        return $this->getLengthOfNationalDestinationCode($number);
    }

Usage Example

 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));
 }
PhoneNumberUtil