private static function loadGeneralDesc(PhoneMetadata $metadata, \DOMElement $element) { $generalDesc = new PhoneNumberDesc(); $generalDesc = self::processPhoneNumberDescElement($generalDesc, $element, self::GENERAL_DESC); $metadata->setGeneralDesc($generalDesc); $metadata->setFixedLine(self::processPhoneNumberDescElement($generalDesc, $element, self::FIXED_LINE)); $metadata->setMobile(self::processPhoneNumberDescElement($generalDesc, $element, self::MOBILE)); $metadata->setStandardRate(self::processPhoneNumberDescElement($generalDesc, $element, self::STANDARD_RATE)); $metadata->setPremiumRate(self::processPhoneNumberDescElement($generalDesc, $element, self::PREMIUM_RATE)); $metadata->setShortCode(self::processPhoneNumberDescElement($generalDesc, $element, self::SHORT_CODE)); $metadata->setTollFree(self::processPhoneNumberDescElement($generalDesc, $element, self::TOLL_FREE)); $metadata->setSharedCost(self::processPhoneNumberDescElement($generalDesc, $element, self::SHARED_COST)); $metadata->setVoip(self::processPhoneNumberDescElement($generalDesc, $element, self::VOIP)); $metadata->setPersonalNumber(self::processPhoneNumberDescElement($generalDesc, $element, self::PERSONAL_NUMBER)); $metadata->setPager(self::processPhoneNumberDescElement($generalDesc, $element, self::PAGER)); $metadata->setUan(self::processPhoneNumberDescElement($generalDesc, $element, self::UAN)); $metadata->setEmergency(self::processPhoneNumberDescElement($generalDesc, $element, self::EMERGENCY)); $metadata->setVoicemail(self::processPhoneNumberDescElement($generalDesc, $element, self::VOICEMAIL)); $metadata->setCarrierSpecific(self::processPhoneNumberDescElement($generalDesc, $element, self::CARRIER_SPECIFIC)); $metadata->setNoInternationalDialling(self::processPhoneNumberDescElement($generalDesc, $element, self::NO_INTERNATIONAL_DIALLING)); $metadata->setSameMobileAndFixedLinePattern($metadata->getMobile()->getNationalNumberPattern() === $metadata->getFixedLine()->getNationalNumberPattern()); }
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 PhoneMetadata $metadata * @param int $type * @return PhoneNumberDesc */ private function getNumberDescByType(PhoneMetadata $metadata, $type) { switch ($type) { case PhoneNumberType::PREMIUM_RATE: return $metadata->getPremiumRate(); case PhoneNumberType::TOLL_FREE: return $metadata->getTollFree(); case PhoneNumberType::MOBILE: return $metadata->getMobile(); case PhoneNumberType::FIXED_LINE: case PhoneNumberType::FIXED_LINE_OR_MOBILE: return $metadata->getFixedLine(); case PhoneNumberType::SHARED_COST: return $metadata->getSharedCost(); case PhoneNumberType::VOIP: return $metadata->getVoip(); case PhoneNumberType::PERSONAL_NUMBER: return $metadata->getPersonalNumber(); case PhoneNumberType::PAGER: return $metadata->getPager(); case PhoneNumberType::UAN: return $metadata->getUan(); case PhoneNumberType::VOICEMAIL: return $metadata->getVoicemail(); default: return $metadata->getGeneralDesc(); } }