本文整理汇总了PHP中PhoneNumber::setCountryCode方法的典型用法代码示例。如果您正苦于以下问题:PHP PhoneNumber::setCountryCode方法的具体用法?PHP PhoneNumber::setCountryCode怎么用?PHP PhoneNumber::setCountryCode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PhoneNumber
的用法示例。
在下文中一共展示了PhoneNumber::setCountryCode方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: maybeExtractCountryCode
/**
* Tries to extract a country calling code from a number. This method will return zero if no
* country calling code is considered to be present. Country calling codes are extracted in the
* following ways:
* <ul>
* <li> by stripping the international dialing prefix of the region the person is dialing from,
* if this is present in the number, and looking at the next digits
* <li> by stripping the '+' sign if present and then looking at the next digits
* <li> by comparing the start of the number and the country calling code of the default region.
* If the number is not considered possible for the numbering plan of the default region
* initially, but starts with the country calling code of this region, validation will be
* reattempted after stripping this country calling code. If this number is considered a
* possible number, then the first digits will be considered the country calling code and
* removed as such.
* </ul>
* It will throw a NumberParseException if the number starts with a '+' but the country calling
* code supplied after this does not match that of any known region.
*
* @param string $number non-normalized telephone number that we wish to extract a country calling
* code from - may begin with '+'
* @param PhoneMetadata $defaultRegionMetadata metadata about the region this number may be from
* @param string $nationalNumber a string buffer to store the national significant number in, in the case
* that a country calling code was extracted. The number is appended to any existing contents.
* If no country calling code was extracted, this will be left unchanged.
* @param bool $keepRawInput true if the country_code_source and preferred_carrier_code fields of
* phoneNumber should be populated.
* @param PhoneNumber $phoneNumber the PhoneNumber object where the country_code and country_code_source need
* to be populated. Note the country_code is always populated, whereas country_code_source is
* only populated when keepCountryCodeSource is true.
* @return int the country calling code extracted or 0 if none could be extracted
* @throws NumberParseException
*/
public function maybeExtractCountryCode($number, PhoneMetadata $defaultRegionMetadata = null, &$nationalNumber, $keepRawInput, PhoneNumber $phoneNumber)
{
if (mb_strlen($number) == 0) {
return 0;
}
$fullNumber = $number;
// Set the default prefix to be something that will never match.
$possibleCountryIddPrefix = "NonMatch";
if ($defaultRegionMetadata !== null) {
$possibleCountryIddPrefix = $defaultRegionMetadata->getInternationalPrefix();
}
$countryCodeSource = $this->maybeStripInternationalPrefixAndNormalize($fullNumber, $possibleCountryIddPrefix);
if ($keepRawInput) {
$phoneNumber->setCountryCodeSource($countryCodeSource);
}
if ($countryCodeSource != CountryCodeSource::FROM_DEFAULT_COUNTRY) {
if (mb_strlen($fullNumber) <= self::MIN_LENGTH_FOR_NSN) {
throw new NumberParseException(NumberParseException::TOO_SHORT_AFTER_IDD, "Phone number had an IDD, but after this was not long enough to be a viable phone number.");
}
$potentialCountryCode = $this->extractCountryCode($fullNumber, $nationalNumber);
if ($potentialCountryCode != 0) {
$phoneNumber->setCountryCode($potentialCountryCode);
return $potentialCountryCode;
}
// If this fails, they must be using a strange country calling code that we don't recognize,
// or that doesn't exist.
throw new NumberParseException(NumberParseException::INVALID_COUNTRY_CODE, "Country calling code supplied was not recognised.");
} else {
if ($defaultRegionMetadata !== null) {
// Check to see if the number starts with the country calling code for the default region. If
// so, we remove the country calling code, and do some checks on the validity of the number
// before and after.
$defaultCountryCode = $defaultRegionMetadata->getCountryCode();
$defaultCountryCodeString = (string) $defaultCountryCode;
$normalizedNumber = (string) $fullNumber;
if (strpos($normalizedNumber, $defaultCountryCodeString) === 0) {
$potentialNationalNumber = substr($normalizedNumber, mb_strlen($defaultCountryCodeString));
$generalDesc = $defaultRegionMetadata->getGeneralDesc();
$validNumberPattern = $generalDesc->getNationalNumberPattern();
// Don't need the carrier code.
$carriercode = null;
$this->maybeStripNationalPrefixAndCarrierCode($potentialNationalNumber, $defaultRegionMetadata, $carriercode);
$possibleNumberPattern = $generalDesc->getPossibleNumberPattern();
// If the number was not valid before but is valid now, or if it was too long before, we
// consider the number with the country calling code stripped to be a better result and
// keep that instead.
if (preg_match('/^(' . $validNumberPattern . ')$/x', $fullNumber) == 0 && preg_match('/^(' . $validNumberPattern . ')$/x', $potentialNationalNumber) > 0 || $this->testNumberLengthAgainstPattern($possibleNumberPattern, (string) $fullNumber) == ValidationResult::TOO_LONG) {
$nationalNumber .= $potentialNationalNumber;
if ($keepRawInput) {
$phoneNumber->setCountryCodeSource(CountryCodeSource::FROM_NUMBER_WITHOUT_PLUS_SIGN);
}
$phoneNumber->setCountryCode($defaultCountryCode);
return $defaultCountryCode;
}
}
}
}
// No country calling code present.
$phoneNumber->setCountryCode(0);
return 0;
}
示例2: testParseNationalNumber
public function testParseNationalNumber()
{
// National prefix attached.
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("033316005", RegionCode::NZ));
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("33316005", RegionCode::NZ));
// National prefix attached and some formatting present.
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("03-331 6005", RegionCode::NZ));
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("03 331 6005", RegionCode::NZ));
// Testing international prefixes.
// Should strip country calling code.
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("0064 3 331 6005", RegionCode::NZ));
// Try again, but this time we have an international number with Region Code US. It should
// recognise the country calling code and parse accordingly.
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("01164 3 331 6005", RegionCode::US));
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("+64 3 331 6005", RegionCode::US));
// We should ignore the leading plus here, since it is not followed by a valid country code but
// instead is followed by the IDD for the US.
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("+01164 3 331 6005", RegionCode::US));
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("+0064 3 331 6005", RegionCode::NZ));
$this->assertEquals(self::$nzNumber, $this->phoneUtil->parse("+ 00 64 3 331 6005", RegionCode::NZ));
$nzNumber = new PhoneNumber();
$nzNumber->setCountryCode(64)->setNationalNumber(64123456);
$this->assertEquals($nzNumber, $this->phoneUtil->parse("64(0)64123456", RegionCode::NZ));
// Check that using a "/" is fine in a phone number.
$this->assertEquals(self::$deNumber, $this->phoneUtil->parse("301/23456", RegionCode::DE));
$usNumber = new PhoneNumber();
// Check it doesn't use the '1' as a country calling code when parsing if the phone number was
// already possible.
$usNumber->setCountryCode(1)->setNationalNumber(1234567890);
$this->assertEquals($usNumber, $this->phoneUtil->parse("123-456-7890", RegionCode::US));
// Test star numbers. Although this is not strictly valid, we would like to make sure we can
// parse the output we produce when formatting the number.
$this->assertEquals(self::$jpStarNumber, $this->phoneUtil->parse("+81 *2345", RegionCode::JP));
// Test national number bigger than max 32-bit signed integer
$inNumber = new PhoneNumber();
$inNumber->setCountryCode(91)->setNationalNumber(9876543210);
$this->assertEquals($inNumber, $this->phoneUtil->parse("9876543210", RegionCode::IN));
}