<?php 
 
if (! function_exists('stripPhone')) { 
 
    function stripPhone($number, $phone_code = null): array { 
 
        if ($phone_code === null) { 
 
            $phone_code = config('world.default_phone_code'); 
        } 
 
        $countries = resolve('countries'); 
 
        $country = $countries->first(fn($country) => $country['phone_code'] === $phone_code); 
 
        $dialling_pattern = $country['dialling_pattern']; 
 
        if ($number != null) { 
            /* -- strip number from non numeric -- */ 
            $number = strval(preg_replace('/[^0-9]+/', '', $number)); 
            /* -- strip number from prefixes -- */ 
            foreach(['+', '0', '00'] as $str) { 
 
                $number = ltrim($number, $str); 
            } 
            /* -- add country code -- */ 
            if (substr($number, 0, intval($dialling_pattern[0])) !== $phone_code) { 
 
                $number = $phone_code . $number; 
            } 
        } 
 
        $expectedLength = 0; 
 
        for ($i = 0; $i < strlen($dialling_pattern); $i++) { 
 
            $expectedLength += intval($dialling_pattern[$i]); 
        } 
 
        return [ 
            'number' => $number, 
            'digits' => $expectedLength 
        ]; 
    } 
} 
 
if (!function_exists('formatPhone')) { 
 
    function formatPhone($number, $phone_code = null): string { 
 
        if ($phone_code === null) { 
 
            $phone_code = config('world.default_phone_code'); 
        } 
 
        $countries = resolve('countries'); 
 
        $country = $countries->first(fn($country) => $country['phone_code'] === $phone_code); 
 
        $dialling_pattern = $country['dialling_pattern']; 
 
        $separator = ' '; 
 
        $prefix = '+'; 
 
        /* -- strip number from non numeric -- */ 
        $number = strval(preg_replace('/[^0-9]+/', '', $number)); 
        /* -- strip number from prefixes -- */ 
        foreach (['+', '0', '00'] as $str) { 
 
            $number = ltrim($number, $str); 
        } 
        /* -- add country code -- */ 
        if (substr($number, 0, intval($dialling_pattern[0])) !== $phone_code) { 
 
            $number = $phone_code . $number; 
        } 
        /* -- build preg_match expression -- */ 
        $pregString = '/^'; 
 
        $expectedLength = 0; 
 
        for ($i = 0; $i < strlen($dialling_pattern); $i++) { 
 
            $expectedLength += intval($dialling_pattern[$i]); 
 
            $pregString .= '(\d{' . $dialling_pattern[$i] . '})'; 
        } 
 
        $pregString .= '$/'; 
        /* -- strip number to expected length -- */ 
        $strippedNumber = substr($number, 0, $expectedLength); 
 
        $extraLength = strlen($number) - $expectedLength; 
 
        $extraNumbers = $extraLength > 0 ? substr($number, -$extraLength) : ''; 
        /* -- format stripped number -- */ 
        $match = preg_match($pregString, $strippedNumber, $matches); 
 
        $formattedNumber = ''; 
        /* -- compose formatted number -- */ 
        if ($match) { 
 
            for ($j = 1; $j < count($matches); $j++) { 
 
                $formattedNumber .= ($matches[$j]) . $separator; 
            } 
 
            $formattedNumber = $prefix . substr($formattedNumber, 0, -1); 
        } 
        /* -- add extra numbers -- */ 
        return $formattedNumber . $extraNumbers; 
    } 
} 
 
 |