PHP Classes

File: src/Helpers/Helpers.php

Recommend this page to a friend!
  Classes of NN   Laravel World   src/Helpers/Helpers.php   Download  
File: src/Helpers/Helpers.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Laravel World
Get data specific to world locations
Author: By
Last change:
Date: 3 years ago
Size: 3,230 bytes
 

Contents

Class file image Download
<?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;
    }
}