- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/phonenumber/parser.php
- Класс: BitrixMainPhoneNumberParser
- Вызов: Parser::stripNationalPrefix
static function stripNationalPrefix(&$phoneNumber, $countryMetadata)
{
$nationalPrefixForParsing = $countryMetadata['nationalPrefixForParsing'] ?? $countryMetadata['nationalPrefix'];
if($phoneNumber == '' || $nationalPrefixForParsing == '')
return '';
$nationalPrefixRegex = '/^(?:' . $nationalPrefixForParsing . ')/';
if(!preg_match($nationalPrefixRegex, $phoneNumber, $nationalPrefixMatches))
{
//if national prefix is omitted, nothing to strip
return '';
}
$nationalPrefixTransformRule = $countryMetadata['nationalPrefixTransformRule'] ?? '';
if($nationalPrefixTransformRule && count($nationalPrefixMatches) > 1)
{
$nationalSignificantNumber = preg_replace($nationalPrefixRegex, $nationalPrefixTransformRule, $phoneNumber);
}
else
{
// No transformation is required, just strip the prefix
$nationalSignificantNumber = mb_substr($phoneNumber, mb_strlen($nationalPrefixMatches[0]));
}
$nationalPrefix = mb_substr($phoneNumber, 0, mb_strlen($phoneNumber) - mb_strlen($nationalSignificantNumber));
$nationalNumberRegex = '/^(?:' . $countryMetadata['generalDesc']['nationalNumberPattern'] . ')$/';
if(preg_match($nationalNumberRegex, $phoneNumber) && !preg_match($nationalNumberRegex, $nationalSignificantNumber))
{
/*
If the original number (before stripping national prefix) was viable, and the resultant number is not,
then prefer the original phone number. This is because for some countries (e.g. Russia) the same digit
could be both a national prefix and a leading digit of a valid national phone number, like `8` is the
national prefix for Russia and both `8 800 555 35 35` and `800 555 35 35` are valid numbers.
*/
return '';
}
$phoneNumber = $nationalSignificantNumber;
return $nationalPrefix;
}