public function testMaybeStripNationalPrefix() { $metadata = new PhoneMetadata(); $metadata->setNationalPrefixForParsing("34"); $phoneNumberDesc = new PhoneNumberDesc(); $phoneNumberDesc->setNationalNumberPattern("\\d{4,8}"); $metadata->setGeneralDesc($phoneNumberDesc); $numberToStrip = "34356778"; $strippedNumber = "356778"; $carrierCode = null; $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals($strippedNumber, $numberToStrip, "Should have had national prefix stripped."); // Retry stripping - now the number should not start with the national prefix, so no more // stripping should occur. $carrierCode = null; $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals($strippedNumber, $numberToStrip, "Should have had no change - no national prefix present."); // Some countries have no national prefix. Repeat test with none specified. $metadata->setNationalPrefixForParsing(""); $carrierCode = null; $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals($strippedNumber, $numberToStrip, "Should not strip anything with empty national prefix."); // If the resultant number doesn't match the national rule, it shouldn't be stripped. $metadata->setNationalPrefixForParsing("3"); $numberToStrip = "3123"; $strippedNumber = "3123"; $carrierCode = null; $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals($strippedNumber, $numberToStrip, "Should have had no change - after stripping, it wouldn't have matched the national rule."); // Test extracting carrier selection code. $metadata->setNationalPrefixForParsing("0(81)?"); $numberToStrip = "08122123456"; $strippedNumber = "22123456"; $carrierCode = ""; $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals("81", $carrierCode); $this->assertEquals($strippedNumber, $numberToStrip, "Should have had national prefix and carrier code stripped."); // If there was a transform rule, check it was applied. $metadata->setNationalPrefixTransformRule("5\${1}5"); // Note that a capturing group is present here. $metadata->setNationalPrefixForParsing("0(\\d{2})"); $numberToStrip = "031123"; $transformedNumber = "5315123"; $carrierCode = null; $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode)); $this->assertEquals($transformedNumber, $numberToStrip, "Should transform the 031 to a 5315."); }
/** * * @param string $regionCode * @param \DOMElement $element * @param string $nationalPrefix * @param string $nationalPrefixFormattingRule * @return PhoneMetadata */ private static function loadTerritoryTagMetadata($regionCode, \DOMElement $element, $nationalPrefix, $nationalPrefixFormattingRule) { $metadata = new PhoneMetadata(); $metadata->setId($regionCode); $metadata->setCountryCode((int) $element->getAttribute(self::COUNTRY_CODE)); if ($element->hasAttribute(self::LEADING_DIGITS)) { $metadata->setLeadingDigits($element->getAttribute(self::LEADING_DIGITS)); } $metadata->setInternationalPrefix($element->getAttribute(self::INTERNATIONAL_PREFIX)); if ($element->hasAttribute(self::PREFERRED_INTERNATIONAL_PREFIX)) { $preferredInternationalPrefix = $element->getAttribute(self::PREFERRED_INTERNATIONAL_PREFIX); $metadata->setPreferredInternationalPrefix($preferredInternationalPrefix); } if ($element->hasAttribute(self::NATIONAL_PREFIX_FOR_PARSING)) { $metadata->setNationalPrefixForParsing($element->getAttribute(self::NATIONAL_PREFIX_FOR_PARSING)); if ($element->hasAttribute(self::NATIONAL_PREFIX_TRANSFORM_RULE)) { $metadata->setNationalPrefixTransformRule($element->getAttribute(self::NATIONAL_PREFIX_TRANSFORM_RULE)); } } if ($nationalPrefix != '') { $metadata->setNationalPrefix($nationalPrefix); if (!$metadata->hasNationalPrefixForParsing()) { $metadata->setNationalPrefixForParsing($nationalPrefix); } } if ($element->hasAttribute(self::PREFERRED_EXTN_PREFIX)) { $metadata->setPreferredExtnPrefix($element->getAttribute(self::PREFERRED_EXTN_PREFIX)); } if ($element->hasAttribute(self::MAIN_COUNTRY_FOR_CODE)) { $metadata->setMainCountryForCode(true); } if ($element->hasAttribute(self::LEADING_ZERO_POSSIBLE)) { $metadata->setLeadingZeroPossible(true); } if ($element->hasAttribute(self::MOBILE_NUMBER_PORTABLE_REGION)) { $metadata->setMobileNumberPortableRegion(true); } return $metadata; }