Форматирование номера телефона php

Here is one that accepts a phonenumber as well as a country code, like
formatPhoneNumber(‘+254722456789′,’KE’)

            function StripPhoneNumber($code, &$phoneNumber)
            {
                $code = strtoupper($code);
                $code = preg_replace('/[^A-Z]/','',$code);
                $countryCode = "";
                $countries = [];
                $countries[] = array("code" => "AF", "name" => "Afghanistan", "d_code" => "+93");
                $countries[] = array("code" => "AL", "name" => "Albania", "d_code" => "+355");
                $countries[] = array("code" => "DZ", "name" => "Algeria", "d_code" => "+213");
                $countries[] = array("code" => "AS", "name" => "American Samoa", "d_code" => "+1");
                $countries[] = array("code" => "AD", "name" => "Andorra", "d_code" => "+376");
                $countries[] = array("code" => "AO", "name" => "Angola", "d_code" => "+244");
                $countries[] = array("code" => "AI", "name" => "Anguilla", "d_code" => "+1");
                $countries[] = array("code" => "AG", "name" => "Antigua", "d_code" => "+1");
                $countries[] = array("code" => "AR", "name" => "Argentina", "d_code" => "+54");
                $countries[] = array("code" => "AM", "name" => "Armenia", "d_code" => "+374");
                $countries[] = array("code" => "AW", "name" => "Aruba", "d_code" => "+297");
                $countries[] = array("code" => "AU", "name" => "Australia", "d_code" => "+61");
                $countries[] = array("code" => "AT", "name" => "Austria", "d_code" => "+43");
                $countries[] = array("code" => "AZ", "name" => "Azerbaijan", "d_code" => "+994");
                $countries[] = array("code" => "BH", "name" => "Bahrain", "d_code" => "+973");
                $countries[] = array("code" => "BD", "name" => "Bangladesh", "d_code" => "+880");
                $countries[] = array("code" => "BB", "name" => "Barbados", "d_code" => "+1");
                $countries[] = array("code" => "BY", "name" => "Belarus", "d_code" => "+375");
                $countries[] = array("code" => "BE", "name" => "Belgium", "d_code" => "+32");
                $countries[] = array("code" => "BZ", "name" => "Belize", "d_code" => "+501");
                $countries[] = array("code" => "BJ", "name" => "Benin", "d_code" => "+229");
                $countries[] = array("code" => "BM", "name" => "Bermuda", "d_code" => "+1");
                $countries[] = array("code" => "BT", "name" => "Bhutan", "d_code" => "+975");
                $countries[] = array("code" => "BO", "name" => "Bolivia", "d_code" => "+591");
                $countries[] = array("code" => "BA", "name" => "Bosnia and Herzegovina", "d_code" => "+387");
                $countries[] = array("code" => "BW", "name" => "Botswana", "d_code" => "+267");
                $countries[] = array("code" => "BR", "name" => "Brazil", "d_code" => "+55");
                $countries[] = array("code" => "IO", "name" => "British Indian Ocean Territory", "d_code" => "+246");
                $countries[] = array("code" => "VG", "name" => "British Virgin Islands", "d_code" => "+1");
                $countries[] = array("code" => "BN", "name" => "Brunei", "d_code" => "+673");
                $countries[] = array("code" => "BG", "name" => "Bulgaria", "d_code" => "+359");
                $countries[] = array("code" => "BF", "name" => "Burkina Faso", "d_code" => "+226");
                $countries[] = array("code" => "MM", "name" => "Burma Myanmar", "d_code" => "+95");
                $countries[] = array("code" => "BI", "name" => "Burundi", "d_code" => "+257");
                $countries[] = array("code" => "KH", "name" => "Cambodia", "d_code" => "+855");
                $countries[] = array("code" => "CM", "name" => "Cameroon", "d_code" => "+237");
                $countries[] = array("code" => "CA", "name" => "Canada", "d_code" => "+1");
                $countries[] = array("code" => "CV", "name" => "Cape Verde", "d_code" => "+238");
                $countries[] = array("code" => "KY", "name" => "Cayman Islands", "d_code" => "+1");
                $countries[] = array("code" => "CF", "name" => "Central African Republic", "d_code" => "+236");
                $countries[] = array("code" => "TD", "name" => "Chad", "d_code" => "+235");
                $countries[] = array("code" => "CL", "name" => "Chile", "d_code" => "+56");
                $countries[] = array("code" => "CN", "name" => "China", "d_code" => "+86");
                $countries[] = array("code" => "CO", "name" => "Colombia", "d_code" => "+57");
                $countries[] = array("code" => "KM", "name" => "Comoros", "d_code" => "+269");
                $countries[] = array("code" => "CK", "name" => "Cook Islands", "d_code" => "+682");
                $countries[] = array("code" => "CR", "name" => "Costa Rica", "d_code" => "+506");
                $countries[] = array("code" => "CI", "name" => "Côte d'Ivoire", "d_code" => "+225");
                $countries[] = array("code" => "HR", "name" => "Croatia", "d_code" => "+385");
                $countries[] = array("code" => "CU", "name" => "Cuba", "d_code" => "+53");
                $countries[] = array("code" => "CY", "name" => "Cyprus", "d_code" => "+357");
                $countries[] = array("code" => "CZ", "name" => "Czech Republic", "d_code" => "+420");
                $countries[] = array("code" => "CD", "name" => "Democratic Republic of Congo", "d_code" => "+243");
                $countries[] = array("code" => "DK", "name" => "Denmark", "d_code" => "+45");
                $countries[] = array("code" => "DJ", "name" => "Djibouti", "d_code" => "+253");
                $countries[] = array("code" => "DM", "name" => "Dominica", "d_code" => "+1");
                $countries[] = array("code" => "DO", "name" => "Dominican Republic", "d_code" => "+1");
                $countries[] = array("code" => "EC", "name" => "Ecuador", "d_code" => "+593");
                $countries[] = array("code" => "EG", "name" => "Egypt", "d_code" => "+20");
                $countries[] = array("code" => "SV", "name" => "El Salvador", "d_code" => "+503");
                $countries[] = array("code" => "GQ", "name" => "Equatorial Guinea", "d_code" => "+240");
                $countries[] = array("code" => "ER", "name" => "Eritrea", "d_code" => "+291");
                $countries[] = array("code" => "EE", "name" => "Estonia", "d_code" => "+372");
                $countries[] = array("code" => "ET", "name" => "Ethiopia", "d_code" => "+251");
                $countries[] = array("code" => "FK", "name" => "Falkland Islands", "d_code" => "+500");
                $countries[] = array("code" => "FO", "name" => "Faroe Islands", "d_code" => "+298");
                $countries[] = array("code" => "FM", "name" => "Federated States of Micronesia", "d_code" => "+691");
                $countries[] = array("code" => "FJ", "name" => "Fiji", "d_code" => "+679");
                $countries[] = array("code" => "FI", "name" => "Finland", "d_code" => "+358");
                $countries[] = array("code" => "FR", "name" => "France", "d_code" => "+33");
                $countries[] = array("code" => "GF", "name" => "French Guiana", "d_code" => "+594");
                $countries[] = array("code" => "PF", "name" => "French Polynesia", "d_code" => "+689");
                $countries[] = array("code" => "GA", "name" => "Gabon", "d_code" => "+241");
                $countries[] = array("code" => "GE", "name" => "Georgia", "d_code" => "+995");
                $countries[] = array("code" => "DE", "name" => "Germany", "d_code" => "+49");
                $countries[] = array("code" => "GH", "name" => "Ghana", "d_code" => "+233");
                $countries[] = array("code" => "GI", "name" => "Gibraltar", "d_code" => "+350");
                $countries[] = array("code" => "GR", "name" => "Greece", "d_code" => "+30");
                $countries[] = array("code" => "GL", "name" => "Greenland", "d_code" => "+299");
                $countries[] = array("code" => "GD", "name" => "Grenada", "d_code" => "+1");
                $countries[] = array("code" => "GP", "name" => "Guadeloupe", "d_code" => "+590");
                $countries[] = array("code" => "GU", "name" => "Guam", "d_code" => "+1");
                $countries[] = array("code" => "GT", "name" => "Guatemala", "d_code" => "+502");
                $countries[] = array("code" => "GN", "name" => "Guinea", "d_code" => "+224");
                $countries[] = array("code" => "GW", "name" => "Guinea-Bissau", "d_code" => "+245");
                $countries[] = array("code" => "GY", "name" => "Guyana", "d_code" => "+592");
                $countries[] = array("code" => "HT", "name" => "Haiti", "d_code" => "+509");
                $countries[] = array("code" => "HN", "name" => "Honduras", "d_code" => "+504");
                $countries[] = array("code" => "HK", "name" => "Hong Kong", "d_code" => "+852");
                $countries[] = array("code" => "HU", "name" => "Hungary", "d_code" => "+36");
                $countries[] = array("code" => "IS", "name" => "Iceland", "d_code" => "+354");
                $countries[] = array("code" => "IN", "name" => "India", "d_code" => "+91");
                $countries[] = array("code" => "ID", "name" => "Indonesia", "d_code" => "+62");
                $countries[] = array("code" => "IR", "name" => "Iran", "d_code" => "+98");
                $countries[] = array("code" => "IQ", "name" => "Iraq", "d_code" => "+964");
                $countries[] = array("code" => "IE", "name" => "Ireland", "d_code" => "+353");
                $countries[] = array("code" => "IL", "name" => "Israel", "d_code" => "+972");
                $countries[] = array("code" => "IT", "name" => "Italy", "d_code" => "+39");
                $countries[] = array("code" => "JM", "name" => "Jamaica", "d_code" => "+1");
                $countries[] = array("code" => "JP", "name" => "Japan", "d_code" => "+81");
                $countries[] = array("code" => "JO", "name" => "Jordan", "d_code" => "+962");
                $countries[] = array("code" => "KZ", "name" => "Kazakhstan", "d_code" => "+7");
                $countries[] = array("code" => "KE", "name" => "Kenya", "d_code" => "+254");
                $countries[] = array("code" => "KI", "name" => "Kiribati", "d_code" => "+686");
                $countries[] = array("code" => "XK", "name" => "Kosovo", "d_code" => "+381");
                $countries[] = array("code" => "KW", "name" => "Kuwait", "d_code" => "+965");
                $countries[] = array("code" => "KG", "name" => "Kyrgyzstan", "d_code" => "+996");
                $countries[] = array("code" => "LA", "name" => "Laos", "d_code" => "+856");
                $countries[] = array("code" => "LV", "name" => "Latvia", "d_code" => "+371");
                $countries[] = array("code" => "LB", "name" => "Lebanon", "d_code" => "+961");
                $countries[] = array("code" => "LS", "name" => "Lesotho", "d_code" => "+266");
                $countries[] = array("code" => "LR", "name" => "Liberia", "d_code" => "+231");
                $countries[] = array("code" => "LY", "name" => "Libya", "d_code" => "+218");
                $countries[] = array("code" => "LI", "name" => "Liechtenstein", "d_code" => "+423");
                $countries[] = array("code" => "LT", "name" => "Lithuania", "d_code" => "+370");
                $countries[] = array("code" => "LU", "name" => "Luxembourg", "d_code" => "+352");
                $countries[] = array("code" => "MO", "name" => "Macau", "d_code" => "+853");
                $countries[] = array("code" => "MK", "name" => "Macedonia", "d_code" => "+389");
                $countries[] = array("code" => "MG", "name" => "Madagascar", "d_code" => "+261");
                $countries[] = array("code" => "MW", "name" => "Malawi", "d_code" => "+265");
                $countries[] = array("code" => "MY", "name" => "Malaysia", "d_code" => "+60");
                $countries[] = array("code" => "MV", "name" => "Maldives", "d_code" => "+960");
                $countries[] = array("code" => "ML", "name" => "Mali", "d_code" => "+223");
                $countries[] = array("code" => "MT", "name" => "Malta", "d_code" => "+356");
                $countries[] = array("code" => "MH", "name" => "Marshall Islands", "d_code" => "+692");
                $countries[] = array("code" => "MQ", "name" => "Martinique", "d_code" => "+596");
                $countries[] = array("code" => "MR", "name" => "Mauritania", "d_code" => "+222");
                $countries[] = array("code" => "MU", "name" => "Mauritius", "d_code" => "+230");
                $countries[] = array("code" => "YT", "name" => "Mayotte", "d_code" => "+262");
                $countries[] = array("code" => "MX", "name" => "Mexico", "d_code" => "+52");
                $countries[] = array("code" => "MD", "name" => "Moldova", "d_code" => "+373");
                $countries[] = array("code" => "MC", "name" => "Monaco", "d_code" => "+377");
                $countries[] = array("code" => "MN", "name" => "Mongolia", "d_code" => "+976");
                $countries[] = array("code" => "ME", "name" => "Montenegro", "d_code" => "+382");
                $countries[] = array("code" => "MS", "name" => "Montserrat", "d_code" => "+1");
                $countries[] = array("code" => "MA", "name" => "Morocco", "d_code" => "+212");
                $countries[] = array("code" => "MZ", "name" => "Mozambique", "d_code" => "+258");
                $countries[] = array("code" => "NA", "name" => "Namibia", "d_code" => "+264");
                $countries[] = array("code" => "NR", "name" => "Nauru", "d_code" => "+674");
                $countries[] = array("code" => "NP", "name" => "Nepal", "d_code" => "+977");
                $countries[] = array("code" => "NL", "name" => "Netherlands", "d_code" => "+31");
                $countries[] = array("code" => "AN", "name" => "Netherlands Antilles", "d_code" => "+599");
                $countries[] = array("code" => "NC", "name" => "New Caledonia", "d_code" => "+687");
                $countries[] = array("code" => "NZ", "name" => "New Zealand", "d_code" => "+64");
                $countries[] = array("code" => "NI", "name" => "Nicaragua", "d_code" => "+505");
                $countries[] = array("code" => "NE", "name" => "Niger", "d_code" => "+227");
                $countries[] = array("code" => "NG", "name" => "Nigeria", "d_code" => "+234");
                $countries[] = array("code" => "NU", "name" => "Niue", "d_code" => "+683");
                $countries[] = array("code" => "NF", "name" => "Norfolk Island", "d_code" => "+672");
                $countries[] = array("code" => "KP", "name" => "North Korea", "d_code" => "+850");
                $countries[] = array("code" => "MP", "name" => "Northern Mariana Islands", "d_code" => "+1");
                $countries[] = array("code" => "NO", "name" => "Norway", "d_code" => "+47");
                $countries[] = array("code" => "OM", "name" => "Oman", "d_code" => "+968");
                $countries[] = array("code" => "PK", "name" => "Pakistan", "d_code" => "+92");
                $countries[] = array("code" => "PW", "name" => "Palau", "d_code" => "+680");
                $countries[] = array("code" => "PS", "name" => "Palestine", "d_code" => "+970");
                $countries[] = array("code" => "PA", "name" => "Panama", "d_code" => "+507");
                $countries[] = array("code" => "PG", "name" => "Papua New Guinea", "d_code" => "+675");
                $countries[] = array("code" => "PY", "name" => "Paraguay", "d_code" => "+595");
                $countries[] = array("code" => "PE", "name" => "Peru", "d_code" => "+51");
                $countries[] = array("code" => "PH", "name" => "Philippines", "d_code" => "+63");
                $countries[] = array("code" => "PL", "name" => "Poland", "d_code" => "+48");
                $countries[] = array("code" => "PT", "name" => "Portugal", "d_code" => "+351");
                $countries[] = array("code" => "PR", "name" => "Puerto Rico", "d_code" => "+1");
                $countries[] = array("code" => "QA", "name" => "Qatar", "d_code" => "+974");
                $countries[] = array("code" => "CG", "name" => "Republic of the Congo", "d_code" => "+242");
                $countries[] = array("code" => "RE", "name" => "Réunion", "d_code" => "+262");
                $countries[] = array("code" => "RO", "name" => "Romania", "d_code" => "+40");
                $countries[] = array("code" => "RU", "name" => "Russia", "d_code" => "+7");
                $countries[] = array("code" => "RW", "name" => "Rwanda", "d_code" => "+250");
                $countries[] = array("code" => "BL", "name" => "Saint Barthélemy", "d_code" => "+590");
                $countries[] = array("code" => "SH", "name" => "Saint Helena", "d_code" => "+290");
                $countries[] = array("code" => "KN", "name" => "Saint Kitts and Nevis", "d_code" => "+1");
                $countries[] = array("code" => "MF", "name" => "Saint Martin", "d_code" => "+590");
                $countries[] = array("code" => "PM", "name" => "Saint Pierre and Miquelon", "d_code" => "+508");
                $countries[] = array("code" => "VC", "name" => "Saint Vincent and the Grenadines", "d_code" => "+1");
                $countries[] = array("code" => "WS", "name" => "Samoa", "d_code" => "+685");
                $countries[] = array("code" => "SM", "name" => "San Marino", "d_code" => "+378");
                $countries[] = array("code" => "ST", "name" => "São Tomé and Príncipe", "d_code" => "+239");
                $countries[] = array("code" => "SA", "name" => "Saudi Arabia", "d_code" => "+966");
                $countries[] = array("code" => "SN", "name" => "Senegal", "d_code" => "+221");
                $countries[] = array("code" => "RS", "name" => "Serbia", "d_code" => "+381");
                $countries[] = array("code" => "SC", "name" => "Seychelles", "d_code" => "+248");
                $countries[] = array("code" => "SL", "name" => "Sierra Leone", "d_code" => "+232");
                $countries[] = array("code" => "SG", "name" => "Singapore", "d_code" => "+65");
                $countries[] = array("code" => "SK", "name" => "Slovakia", "d_code" => "+421");
                $countries[] = array("code" => "SI", "name" => "Slovenia", "d_code" => "+386");
                $countries[] = array("code" => "SB", "name" => "Solomon Islands", "d_code" => "+677");
                $countries[] = array("code" => "SO", "name" => "Somalia", "d_code" => "+252");
                $countries[] = array("code" => "ZA", "name" => "South Africa", "d_code" => "+27");
                $countries[] = array("code" => "KR", "name" => "South Korea", "d_code" => "+82");
                $countries[] = array("code" => "ES", "name" => "Spain", "d_code" => "+34");
                $countries[] = array("code" => "LK", "name" => "Sri Lanka", "d_code" => "+94");
                $countries[] = array("code" => "LC", "name" => "St. Lucia", "d_code" => "+1");
                $countries[] = array("code" => "SD", "name" => "Sudan", "d_code" => "+249");
                $countries[] = array("code" => "SR", "name" => "Suriname", "d_code" => "+597");
                $countries[] = array("code" => "SZ", "name" => "Swaziland", "d_code" => "+268");
                $countries[] = array("code" => "SE", "name" => "Sweden", "d_code" => "+46");
                $countries[] = array("code" => "CH", "name" => "Switzerland", "d_code" => "+41");
                $countries[] = array("code" => "SY", "name" => "Syria", "d_code" => "+963");
                $countries[] = array("code" => "TW", "name" => "Taiwan", "d_code" => "+886");
                $countries[] = array("code" => "TJ", "name" => "Tajikistan", "d_code" => "+992");
                $countries[] = array("code" => "TZ", "name" => "Tanzania", "d_code" => "+255");
                $countries[] = array("code" => "TH", "name" => "Thailand", "d_code" => "+66");
                $countries[] = array("code" => "BS", "name" => "The Bahamas", "d_code" => "+1");
                $countries[] = array("code" => "GM", "name" => "The Gambia", "d_code" => "+220");
                $countries[] = array("code" => "TL", "name" => "Timor-Leste", "d_code" => "+670");
                $countries[] = array("code" => "TG", "name" => "Togo", "d_code" => "+228");
                $countries[] = array("code" => "TK", "name" => "Tokelau", "d_code" => "+690");
                $countries[] = array("code" => "TO", "name" => "Tonga", "d_code" => "+676");
                $countries[] = array("code" => "TT", "name" => "Trinidad and Tobago", "d_code" => "+1");
                $countries[] = array("code" => "TN", "name" => "Tunisia", "d_code" => "+216");
                $countries[] = array("code" => "TR", "name" => "Turkey", "d_code" => "+90");
                $countries[] = array("code" => "TM", "name" => "Turkmenistan", "d_code" => "+993");
                $countries[] = array("code" => "TC", "name" => "Turks and Caicos Islands", "d_code" => "+1");
                $countries[] = array("code" => "TV", "name" => "Tuvalu", "d_code" => "+688");
                $countries[] = array("code" => "UG", "name" => "Uganda", "d_code" => "+256");
                $countries[] = array("code" => "UA", "name" => "Ukraine", "d_code" => "+380");
                $countries[] = array("code" => "AE", "name" => "United Arab Emirates", "d_code" => "+971");
                $countries[] = array("code" => "GB", "name" => "United Kingdom", "d_code" => "+44");
                $countries[] = array("code" => "US", "name" => "United States", "d_code" => "+1");
                $countries[] = array("code" => "UY", "name" => "Uruguay", "d_code" => "+598");
                $countries[] = array("code" => "VI", "name" => "US Virgin Islands", "d_code" => "+1");
                $countries[] = array("code" => "UZ", "name" => "Uzbekistan", "d_code" => "+998");
                $countries[] = array("code" => "VU", "name" => "Vanuatu", "d_code" => "+678");
                $countries[] = array("code" => "VA", "name" => "Vatican City", "d_code" => "+39");
                $countries[] = array("code" => "VE", "name" => "Venezuela", "d_code" => "+58");
                $countries[] = array("code" => "VN", "name" => "Vietnam", "d_code" => "+84");
                $countries[] = array("code" => "WF", "name" => "Wallis and Futuna", "d_code" => "+681");
                $countries[] = array("code" => "YE", "name" => "Yemen", "d_code" => "+967");
                $countries[] = array("code" => "ZM", "name" => "Zambia", "d_code" => "+260");
                $countries[] = array("code" => "ZW", "name" => "Zimbabwe", "d_code" => "+263");

                $code = strtoupper($code);
                $UsephoneNumber = " "."+";
                $UsephoneNumber = $UsephoneNumber.(preg_replace('/[^0-9]/','',$phoneNumber));

                for($index=0; $index<count($countries); $index++)
                {
                    $array1 = $countries[$index];
                    if($array1['code'] == $code)
                    {
                        $dCode = $array1['d_code'];
                        $explode_ = explode($dCode, $UsephoneNumber, 2);
                        if(count($explode_) == 2)
                        {
                            $phoneNumber = $explode_[1];
                            $countryCode = $dCode;
                        }
                        break;
                    }
                }

                return $countryCode;
            }


            function formatPhoneNumber($phoneNumber, $code="") {

                $countryCode = StripPhoneNumber($code, $phoneNumber);
                $phoneNumber = preg_replace('/[^0-9]/','',$phoneNumber);

                if(strlen($phoneNumber) > 10) {
                    $countryCode = substr($phoneNumber, 0, strlen($phoneNumber)-10);
                    $areaCode = substr($phoneNumber, -10, 3);
                    $nextThree = substr($phoneNumber, -7, 3);
                    $lastFour = substr($phoneNumber, -4, 4);

                    $phoneNumber = '+'.$countryCode.' ('.$areaCode.') '.$nextThree.'-'.$lastFour;
                }
                else if(strlen($phoneNumber) == 10) {
                    $areaCode = substr($phoneNumber, 0, 3);
                    $nextThree = substr($phoneNumber, 3, 3);
                    $lastFour = substr($phoneNumber, 6, 4);

                    $phoneNumber = '('.$areaCode.') '.$nextThree.'-'.$lastFour;
                }
                else if(strlen($phoneNumber) == 7) {
                    $nextThree = substr($phoneNumber, 0, 3);
                    $lastFour = substr($phoneNumber, 3, 4);

                    $phoneNumber = $nextThree.'-'.$lastFour;
                }
                else
                {
                    $sub = "";
                    while(strlen($phoneNumber) >= 3)
                    {
                        if( strlen($phoneNumber) >= 3 && (strlen($phoneNumber) % 2 != 0) )
                        {
                            $sub = $sub.substr($phoneNumber, 0, 3)." ";
                            $phoneNumber = substr($phoneNumber, 3);
                        }
                        else
                        if( (strlen($phoneNumber) % 2 == 0) && strlen($phoneNumber) >= 2 )
                        {
                           $sub = $sub.substr($phoneNumber, 0, 2)." ";
                           $phoneNumber = substr($phoneNumber, 2);
                        }
                    }

                    if( strlen($phoneNumber) > 0)
                    {
                        $sub = $sub.$phoneNumber." ";
                    }

                    $phoneNumber = trim($sub," ");

                }

                return $countryCode." ".$phoneNumber;
            }

Несколько PHP-функций для форматирования телефонных номеров.

1

Формат +7 (xxx) xxx-xx-xx

Формат +7 (xxx) xxx-xx-xx очень распространён, но правильнее писать номера без скобок. В нормах русского языка скобки используются для поясняющей и дополняющей информации, а так как без кода оператора или города дозвониться до абонента не получится, то это уже не дополнительная информация.

function phone_format($phone) 
{
	$phone = trim($phone);

	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 
			'+7 ($2) $3-$4-$5', 	
			'+7 ($2) $3-$4', 
			'+7 ($2) $3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Тестирование и результаты

Мобильные и городские:

echo phone_format('+7 (495) 1234567');
echo phone_format('+8 (495) 123 45 67');
echo phone_format('+7(495)123-45-67');
echo phone_format('+7(495)1234567');
echo phone_format('+7 495 123-45-67');
echo phone_format('+8 495 123 45 67');
echo phone_format('+7 495 1234567');
echo phone_format('+7-495-123-45-67');
echo phone_format('84951234567');

PHP

+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67
+7 (495) 123-45-67

Региональные:

echo phone_format('7 4734 12-34-56');
echo phone_format('7 4735 123-456');

PHP

+7 (4734) 12-34-56
+7 (4735) 123-456

С текстом:

echo phone_format('+7-495-123-45-67 Иван');
echo phone_format('+84951234567 доп. 123');
echo phone_format('+74951234567, +79031234567');
echo phone_format('тел. +84951234567');

PHP

+7 (495) 123-45-67 Иван
+7 (495) 123-45-67 доп. 123
+7 (495) 123-45-67, +7 (903) 123-45-67
тел. +7 (495) 123-45-67

Номера с ошибками:

echo phone_format('495 1234567');
echo phone_format('8(8001234567');
echo phone_format('8800;1234567');

PHP

495 1234567
8(8001234567
8800;1234567

2

Формат +7 xxx xxx-xx-xx

function phone_format($phone) 
{
	$phone = trim($phone);

	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 
			'+7 $2 $3-$4-$5', 	
			'+7 $2 $3-$4', 
			'+7 $2 $3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Результат:

/* Мобильные и городские */
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67
+7 495 123-45-67

/* Региональные */
+7 4734 12-34-56
+7 4735 123-456

/* С текстом */
+7 495 123-45-67 Иван
+7 495 123-45-67 доп. 123
+7 495 123-45-67, +7 903 123-45-67
тел. +7 495 123-45-67

/* Номера с ошибками */
495 1234567
8(8001234567
8800;1234567

3

Формат +7-xxx-xxx-xx-xx

function phone_format($phone) 
{
	$phone = trim($phone);
 
	$res = preg_replace(
		array(
			'/[+]?([7|8])[-|s]?([-|s]?(d{3})[-|s]?)[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{3})[-|s]?(d{3})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{2})[-|s]?(d{2})[-|s]?(d{2})/',	
			'/[+]?([7|8])[-|s]?([-|s]?(d{4})[-|s]?)[-|s]?(d{3})[-|s]?(d{3})/',
			'/[+]?([7|8])[-|s]?(d{4})[-|s]?(d{3})[-|s]?(d{3})/',					
		), 
		array(
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 
			'+7-$2-$3-$4-$5', 	
			'+7-$2-$3-$4', 
			'+7-$2-$3-$4', 
		), 
		$phone
	);
 
	return $res;
}

PHP

Результат:

/* Мобильные и городские */
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67
+7-495-123-45-67

/* Региональные */
+7-4734-12-34-56
+7-4735-123-456

/* С текстом */
+7-495-123-45-67 Иван
+7-495-123-45-67 доп. 123
+7-495-123-45-67, +7 903 123-45-67
тел. +7-495-123-45-67

/* Номера с ошибками */
495 1234567
8(8001234567
8800;1234567

TEXT

Here is one that accepts a phonenumber as well as a country code, like
formatPhoneNumber(‘+254722456789′,’KE’)

            function StripPhoneNumber($code, &$phoneNumber)
            {
                $code = strtoupper($code);
                $code = preg_replace('/[^A-Z]/','',$code);
                $countryCode = "";
                $countries = [];
                $countries[] = array("code" => "AF", "name" => "Afghanistan", "d_code" => "+93");
                $countries[] = array("code" => "AL", "name" => "Albania", "d_code" => "+355");
                $countries[] = array("code" => "DZ", "name" => "Algeria", "d_code" => "+213");
                $countries[] = array("code" => "AS", "name" => "American Samoa", "d_code" => "+1");
                $countries[] = array("code" => "AD", "name" => "Andorra", "d_code" => "+376");
                $countries[] = array("code" => "AO", "name" => "Angola", "d_code" => "+244");
                $countries[] = array("code" => "AI", "name" => "Anguilla", "d_code" => "+1");
                $countries[] = array("code" => "AG", "name" => "Antigua", "d_code" => "+1");
                $countries[] = array("code" => "AR", "name" => "Argentina", "d_code" => "+54");
                $countries[] = array("code" => "AM", "name" => "Armenia", "d_code" => "+374");
                $countries[] = array("code" => "AW", "name" => "Aruba", "d_code" => "+297");
                $countries[] = array("code" => "AU", "name" => "Australia", "d_code" => "+61");
                $countries[] = array("code" => "AT", "name" => "Austria", "d_code" => "+43");
                $countries[] = array("code" => "AZ", "name" => "Azerbaijan", "d_code" => "+994");
                $countries[] = array("code" => "BH", "name" => "Bahrain", "d_code" => "+973");
                $countries[] = array("code" => "BD", "name" => "Bangladesh", "d_code" => "+880");
                $countries[] = array("code" => "BB", "name" => "Barbados", "d_code" => "+1");
                $countries[] = array("code" => "BY", "name" => "Belarus", "d_code" => "+375");
                $countries[] = array("code" => "BE", "name" => "Belgium", "d_code" => "+32");
                $countries[] = array("code" => "BZ", "name" => "Belize", "d_code" => "+501");
                $countries[] = array("code" => "BJ", "name" => "Benin", "d_code" => "+229");
                $countries[] = array("code" => "BM", "name" => "Bermuda", "d_code" => "+1");
                $countries[] = array("code" => "BT", "name" => "Bhutan", "d_code" => "+975");
                $countries[] = array("code" => "BO", "name" => "Bolivia", "d_code" => "+591");
                $countries[] = array("code" => "BA", "name" => "Bosnia and Herzegovina", "d_code" => "+387");
                $countries[] = array("code" => "BW", "name" => "Botswana", "d_code" => "+267");
                $countries[] = array("code" => "BR", "name" => "Brazil", "d_code" => "+55");
                $countries[] = array("code" => "IO", "name" => "British Indian Ocean Territory", "d_code" => "+246");
                $countries[] = array("code" => "VG", "name" => "British Virgin Islands", "d_code" => "+1");
                $countries[] = array("code" => "BN", "name" => "Brunei", "d_code" => "+673");
                $countries[] = array("code" => "BG", "name" => "Bulgaria", "d_code" => "+359");
                $countries[] = array("code" => "BF", "name" => "Burkina Faso", "d_code" => "+226");
                $countries[] = array("code" => "MM", "name" => "Burma Myanmar", "d_code" => "+95");
                $countries[] = array("code" => "BI", "name" => "Burundi", "d_code" => "+257");
                $countries[] = array("code" => "KH", "name" => "Cambodia", "d_code" => "+855");
                $countries[] = array("code" => "CM", "name" => "Cameroon", "d_code" => "+237");
                $countries[] = array("code" => "CA", "name" => "Canada", "d_code" => "+1");
                $countries[] = array("code" => "CV", "name" => "Cape Verde", "d_code" => "+238");
                $countries[] = array("code" => "KY", "name" => "Cayman Islands", "d_code" => "+1");
                $countries[] = array("code" => "CF", "name" => "Central African Republic", "d_code" => "+236");
                $countries[] = array("code" => "TD", "name" => "Chad", "d_code" => "+235");
                $countries[] = array("code" => "CL", "name" => "Chile", "d_code" => "+56");
                $countries[] = array("code" => "CN", "name" => "China", "d_code" => "+86");
                $countries[] = array("code" => "CO", "name" => "Colombia", "d_code" => "+57");
                $countries[] = array("code" => "KM", "name" => "Comoros", "d_code" => "+269");
                $countries[] = array("code" => "CK", "name" => "Cook Islands", "d_code" => "+682");
                $countries[] = array("code" => "CR", "name" => "Costa Rica", "d_code" => "+506");
                $countries[] = array("code" => "CI", "name" => "Côte d'Ivoire", "d_code" => "+225");
                $countries[] = array("code" => "HR", "name" => "Croatia", "d_code" => "+385");
                $countries[] = array("code" => "CU", "name" => "Cuba", "d_code" => "+53");
                $countries[] = array("code" => "CY", "name" => "Cyprus", "d_code" => "+357");
                $countries[] = array("code" => "CZ", "name" => "Czech Republic", "d_code" => "+420");
                $countries[] = array("code" => "CD", "name" => "Democratic Republic of Congo", "d_code" => "+243");
                $countries[] = array("code" => "DK", "name" => "Denmark", "d_code" => "+45");
                $countries[] = array("code" => "DJ", "name" => "Djibouti", "d_code" => "+253");
                $countries[] = array("code" => "DM", "name" => "Dominica", "d_code" => "+1");
                $countries[] = array("code" => "DO", "name" => "Dominican Republic", "d_code" => "+1");
                $countries[] = array("code" => "EC", "name" => "Ecuador", "d_code" => "+593");
                $countries[] = array("code" => "EG", "name" => "Egypt", "d_code" => "+20");
                $countries[] = array("code" => "SV", "name" => "El Salvador", "d_code" => "+503");
                $countries[] = array("code" => "GQ", "name" => "Equatorial Guinea", "d_code" => "+240");
                $countries[] = array("code" => "ER", "name" => "Eritrea", "d_code" => "+291");
                $countries[] = array("code" => "EE", "name" => "Estonia", "d_code" => "+372");
                $countries[] = array("code" => "ET", "name" => "Ethiopia", "d_code" => "+251");
                $countries[] = array("code" => "FK", "name" => "Falkland Islands", "d_code" => "+500");
                $countries[] = array("code" => "FO", "name" => "Faroe Islands", "d_code" => "+298");
                $countries[] = array("code" => "FM", "name" => "Federated States of Micronesia", "d_code" => "+691");
                $countries[] = array("code" => "FJ", "name" => "Fiji", "d_code" => "+679");
                $countries[] = array("code" => "FI", "name" => "Finland", "d_code" => "+358");
                $countries[] = array("code" => "FR", "name" => "France", "d_code" => "+33");
                $countries[] = array("code" => "GF", "name" => "French Guiana", "d_code" => "+594");
                $countries[] = array("code" => "PF", "name" => "French Polynesia", "d_code" => "+689");
                $countries[] = array("code" => "GA", "name" => "Gabon", "d_code" => "+241");
                $countries[] = array("code" => "GE", "name" => "Georgia", "d_code" => "+995");
                $countries[] = array("code" => "DE", "name" => "Germany", "d_code" => "+49");
                $countries[] = array("code" => "GH", "name" => "Ghana", "d_code" => "+233");
                $countries[] = array("code" => "GI", "name" => "Gibraltar", "d_code" => "+350");
                $countries[] = array("code" => "GR", "name" => "Greece", "d_code" => "+30");
                $countries[] = array("code" => "GL", "name" => "Greenland", "d_code" => "+299");
                $countries[] = array("code" => "GD", "name" => "Grenada", "d_code" => "+1");
                $countries[] = array("code" => "GP", "name" => "Guadeloupe", "d_code" => "+590");
                $countries[] = array("code" => "GU", "name" => "Guam", "d_code" => "+1");
                $countries[] = array("code" => "GT", "name" => "Guatemala", "d_code" => "+502");
                $countries[] = array("code" => "GN", "name" => "Guinea", "d_code" => "+224");
                $countries[] = array("code" => "GW", "name" => "Guinea-Bissau", "d_code" => "+245");
                $countries[] = array("code" => "GY", "name" => "Guyana", "d_code" => "+592");
                $countries[] = array("code" => "HT", "name" => "Haiti", "d_code" => "+509");
                $countries[] = array("code" => "HN", "name" => "Honduras", "d_code" => "+504");
                $countries[] = array("code" => "HK", "name" => "Hong Kong", "d_code" => "+852");
                $countries[] = array("code" => "HU", "name" => "Hungary", "d_code" => "+36");
                $countries[] = array("code" => "IS", "name" => "Iceland", "d_code" => "+354");
                $countries[] = array("code" => "IN", "name" => "India", "d_code" => "+91");
                $countries[] = array("code" => "ID", "name" => "Indonesia", "d_code" => "+62");
                $countries[] = array("code" => "IR", "name" => "Iran", "d_code" => "+98");
                $countries[] = array("code" => "IQ", "name" => "Iraq", "d_code" => "+964");
                $countries[] = array("code" => "IE", "name" => "Ireland", "d_code" => "+353");
                $countries[] = array("code" => "IL", "name" => "Israel", "d_code" => "+972");
                $countries[] = array("code" => "IT", "name" => "Italy", "d_code" => "+39");
                $countries[] = array("code" => "JM", "name" => "Jamaica", "d_code" => "+1");
                $countries[] = array("code" => "JP", "name" => "Japan", "d_code" => "+81");
                $countries[] = array("code" => "JO", "name" => "Jordan", "d_code" => "+962");
                $countries[] = array("code" => "KZ", "name" => "Kazakhstan", "d_code" => "+7");
                $countries[] = array("code" => "KE", "name" => "Kenya", "d_code" => "+254");
                $countries[] = array("code" => "KI", "name" => "Kiribati", "d_code" => "+686");
                $countries[] = array("code" => "XK", "name" => "Kosovo", "d_code" => "+381");
                $countries[] = array("code" => "KW", "name" => "Kuwait", "d_code" => "+965");
                $countries[] = array("code" => "KG", "name" => "Kyrgyzstan", "d_code" => "+996");
                $countries[] = array("code" => "LA", "name" => "Laos", "d_code" => "+856");
                $countries[] = array("code" => "LV", "name" => "Latvia", "d_code" => "+371");
                $countries[] = array("code" => "LB", "name" => "Lebanon", "d_code" => "+961");
                $countries[] = array("code" => "LS", "name" => "Lesotho", "d_code" => "+266");
                $countries[] = array("code" => "LR", "name" => "Liberia", "d_code" => "+231");
                $countries[] = array("code" => "LY", "name" => "Libya", "d_code" => "+218");
                $countries[] = array("code" => "LI", "name" => "Liechtenstein", "d_code" => "+423");
                $countries[] = array("code" => "LT", "name" => "Lithuania", "d_code" => "+370");
                $countries[] = array("code" => "LU", "name" => "Luxembourg", "d_code" => "+352");
                $countries[] = array("code" => "MO", "name" => "Macau", "d_code" => "+853");
                $countries[] = array("code" => "MK", "name" => "Macedonia", "d_code" => "+389");
                $countries[] = array("code" => "MG", "name" => "Madagascar", "d_code" => "+261");
                $countries[] = array("code" => "MW", "name" => "Malawi", "d_code" => "+265");
                $countries[] = array("code" => "MY", "name" => "Malaysia", "d_code" => "+60");
                $countries[] = array("code" => "MV", "name" => "Maldives", "d_code" => "+960");
                $countries[] = array("code" => "ML", "name" => "Mali", "d_code" => "+223");
                $countries[] = array("code" => "MT", "name" => "Malta", "d_code" => "+356");
                $countries[] = array("code" => "MH", "name" => "Marshall Islands", "d_code" => "+692");
                $countries[] = array("code" => "MQ", "name" => "Martinique", "d_code" => "+596");
                $countries[] = array("code" => "MR", "name" => "Mauritania", "d_code" => "+222");
                $countries[] = array("code" => "MU", "name" => "Mauritius", "d_code" => "+230");
                $countries[] = array("code" => "YT", "name" => "Mayotte", "d_code" => "+262");
                $countries[] = array("code" => "MX", "name" => "Mexico", "d_code" => "+52");
                $countries[] = array("code" => "MD", "name" => "Moldova", "d_code" => "+373");
                $countries[] = array("code" => "MC", "name" => "Monaco", "d_code" => "+377");
                $countries[] = array("code" => "MN", "name" => "Mongolia", "d_code" => "+976");
                $countries[] = array("code" => "ME", "name" => "Montenegro", "d_code" => "+382");
                $countries[] = array("code" => "MS", "name" => "Montserrat", "d_code" => "+1");
                $countries[] = array("code" => "MA", "name" => "Morocco", "d_code" => "+212");
                $countries[] = array("code" => "MZ", "name" => "Mozambique", "d_code" => "+258");
                $countries[] = array("code" => "NA", "name" => "Namibia", "d_code" => "+264");
                $countries[] = array("code" => "NR", "name" => "Nauru", "d_code" => "+674");
                $countries[] = array("code" => "NP", "name" => "Nepal", "d_code" => "+977");
                $countries[] = array("code" => "NL", "name" => "Netherlands", "d_code" => "+31");
                $countries[] = array("code" => "AN", "name" => "Netherlands Antilles", "d_code" => "+599");
                $countries[] = array("code" => "NC", "name" => "New Caledonia", "d_code" => "+687");
                $countries[] = array("code" => "NZ", "name" => "New Zealand", "d_code" => "+64");
                $countries[] = array("code" => "NI", "name" => "Nicaragua", "d_code" => "+505");
                $countries[] = array("code" => "NE", "name" => "Niger", "d_code" => "+227");
                $countries[] = array("code" => "NG", "name" => "Nigeria", "d_code" => "+234");
                $countries[] = array("code" => "NU", "name" => "Niue", "d_code" => "+683");
                $countries[] = array("code" => "NF", "name" => "Norfolk Island", "d_code" => "+672");
                $countries[] = array("code" => "KP", "name" => "North Korea", "d_code" => "+850");
                $countries[] = array("code" => "MP", "name" => "Northern Mariana Islands", "d_code" => "+1");
                $countries[] = array("code" => "NO", "name" => "Norway", "d_code" => "+47");
                $countries[] = array("code" => "OM", "name" => "Oman", "d_code" => "+968");
                $countries[] = array("code" => "PK", "name" => "Pakistan", "d_code" => "+92");
                $countries[] = array("code" => "PW", "name" => "Palau", "d_code" => "+680");
                $countries[] = array("code" => "PS", "name" => "Palestine", "d_code" => "+970");
                $countries[] = array("code" => "PA", "name" => "Panama", "d_code" => "+507");
                $countries[] = array("code" => "PG", "name" => "Papua New Guinea", "d_code" => "+675");
                $countries[] = array("code" => "PY", "name" => "Paraguay", "d_code" => "+595");
                $countries[] = array("code" => "PE", "name" => "Peru", "d_code" => "+51");
                $countries[] = array("code" => "PH", "name" => "Philippines", "d_code" => "+63");
                $countries[] = array("code" => "PL", "name" => "Poland", "d_code" => "+48");
                $countries[] = array("code" => "PT", "name" => "Portugal", "d_code" => "+351");
                $countries[] = array("code" => "PR", "name" => "Puerto Rico", "d_code" => "+1");
                $countries[] = array("code" => "QA", "name" => "Qatar", "d_code" => "+974");
                $countries[] = array("code" => "CG", "name" => "Republic of the Congo", "d_code" => "+242");
                $countries[] = array("code" => "RE", "name" => "Réunion", "d_code" => "+262");
                $countries[] = array("code" => "RO", "name" => "Romania", "d_code" => "+40");
                $countries[] = array("code" => "RU", "name" => "Russia", "d_code" => "+7");
                $countries[] = array("code" => "RW", "name" => "Rwanda", "d_code" => "+250");
                $countries[] = array("code" => "BL", "name" => "Saint Barthélemy", "d_code" => "+590");
                $countries[] = array("code" => "SH", "name" => "Saint Helena", "d_code" => "+290");
                $countries[] = array("code" => "KN", "name" => "Saint Kitts and Nevis", "d_code" => "+1");
                $countries[] = array("code" => "MF", "name" => "Saint Martin", "d_code" => "+590");
                $countries[] = array("code" => "PM", "name" => "Saint Pierre and Miquelon", "d_code" => "+508");
                $countries[] = array("code" => "VC", "name" => "Saint Vincent and the Grenadines", "d_code" => "+1");
                $countries[] = array("code" => "WS", "name" => "Samoa", "d_code" => "+685");
                $countries[] = array("code" => "SM", "name" => "San Marino", "d_code" => "+378");
                $countries[] = array("code" => "ST", "name" => "São Tomé and Príncipe", "d_code" => "+239");
                $countries[] = array("code" => "SA", "name" => "Saudi Arabia", "d_code" => "+966");
                $countries[] = array("code" => "SN", "name" => "Senegal", "d_code" => "+221");
                $countries[] = array("code" => "RS", "name" => "Serbia", "d_code" => "+381");
                $countries[] = array("code" => "SC", "name" => "Seychelles", "d_code" => "+248");
                $countries[] = array("code" => "SL", "name" => "Sierra Leone", "d_code" => "+232");
                $countries[] = array("code" => "SG", "name" => "Singapore", "d_code" => "+65");
                $countries[] = array("code" => "SK", "name" => "Slovakia", "d_code" => "+421");
                $countries[] = array("code" => "SI", "name" => "Slovenia", "d_code" => "+386");
                $countries[] = array("code" => "SB", "name" => "Solomon Islands", "d_code" => "+677");
                $countries[] = array("code" => "SO", "name" => "Somalia", "d_code" => "+252");
                $countries[] = array("code" => "ZA", "name" => "South Africa", "d_code" => "+27");
                $countries[] = array("code" => "KR", "name" => "South Korea", "d_code" => "+82");
                $countries[] = array("code" => "ES", "name" => "Spain", "d_code" => "+34");
                $countries[] = array("code" => "LK", "name" => "Sri Lanka", "d_code" => "+94");
                $countries[] = array("code" => "LC", "name" => "St. Lucia", "d_code" => "+1");
                $countries[] = array("code" => "SD", "name" => "Sudan", "d_code" => "+249");
                $countries[] = array("code" => "SR", "name" => "Suriname", "d_code" => "+597");
                $countries[] = array("code" => "SZ", "name" => "Swaziland", "d_code" => "+268");
                $countries[] = array("code" => "SE", "name" => "Sweden", "d_code" => "+46");
                $countries[] = array("code" => "CH", "name" => "Switzerland", "d_code" => "+41");
                $countries[] = array("code" => "SY", "name" => "Syria", "d_code" => "+963");
                $countries[] = array("code" => "TW", "name" => "Taiwan", "d_code" => "+886");
                $countries[] = array("code" => "TJ", "name" => "Tajikistan", "d_code" => "+992");
                $countries[] = array("code" => "TZ", "name" => "Tanzania", "d_code" => "+255");
                $countries[] = array("code" => "TH", "name" => "Thailand", "d_code" => "+66");
                $countries[] = array("code" => "BS", "name" => "The Bahamas", "d_code" => "+1");
                $countries[] = array("code" => "GM", "name" => "The Gambia", "d_code" => "+220");
                $countries[] = array("code" => "TL", "name" => "Timor-Leste", "d_code" => "+670");
                $countries[] = array("code" => "TG", "name" => "Togo", "d_code" => "+228");
                $countries[] = array("code" => "TK", "name" => "Tokelau", "d_code" => "+690");
                $countries[] = array("code" => "TO", "name" => "Tonga", "d_code" => "+676");
                $countries[] = array("code" => "TT", "name" => "Trinidad and Tobago", "d_code" => "+1");
                $countries[] = array("code" => "TN", "name" => "Tunisia", "d_code" => "+216");
                $countries[] = array("code" => "TR", "name" => "Turkey", "d_code" => "+90");
                $countries[] = array("code" => "TM", "name" => "Turkmenistan", "d_code" => "+993");
                $countries[] = array("code" => "TC", "name" => "Turks and Caicos Islands", "d_code" => "+1");
                $countries[] = array("code" => "TV", "name" => "Tuvalu", "d_code" => "+688");
                $countries[] = array("code" => "UG", "name" => "Uganda", "d_code" => "+256");
                $countries[] = array("code" => "UA", "name" => "Ukraine", "d_code" => "+380");
                $countries[] = array("code" => "AE", "name" => "United Arab Emirates", "d_code" => "+971");
                $countries[] = array("code" => "GB", "name" => "United Kingdom", "d_code" => "+44");
                $countries[] = array("code" => "US", "name" => "United States", "d_code" => "+1");
                $countries[] = array("code" => "UY", "name" => "Uruguay", "d_code" => "+598");
                $countries[] = array("code" => "VI", "name" => "US Virgin Islands", "d_code" => "+1");
                $countries[] = array("code" => "UZ", "name" => "Uzbekistan", "d_code" => "+998");
                $countries[] = array("code" => "VU", "name" => "Vanuatu", "d_code" => "+678");
                $countries[] = array("code" => "VA", "name" => "Vatican City", "d_code" => "+39");
                $countries[] = array("code" => "VE", "name" => "Venezuela", "d_code" => "+58");
                $countries[] = array("code" => "VN", "name" => "Vietnam", "d_code" => "+84");
                $countries[] = array("code" => "WF", "name" => "Wallis and Futuna", "d_code" => "+681");
                $countries[] = array("code" => "YE", "name" => "Yemen", "d_code" => "+967");
                $countries[] = array("code" => "ZM", "name" => "Zambia", "d_code" => "+260");
                $countries[] = array("code" => "ZW", "name" => "Zimbabwe", "d_code" => "+263");

                $code = strtoupper($code);
                $UsephoneNumber = " "."+";
                $UsephoneNumber = $UsephoneNumber.(preg_replace('/[^0-9]/','',$phoneNumber));

                for($index=0; $index<count($countries); $index++)
                {
                    $array1 = $countries[$index];
                    if($array1['code'] == $code)
                    {
                        $dCode = $array1['d_code'];
                        $explode_ = explode($dCode, $UsephoneNumber, 2);
                        if(count($explode_) == 2)
                        {
                            $phoneNumber = $explode_[1];
                            $countryCode = $dCode;
                        }
                        break;
                    }
                }

                return $countryCode;
            }


            function formatPhoneNumber($phoneNumber, $code="") {

                $countryCode = StripPhoneNumber($code, $phoneNumber);
                $phoneNumber = preg_replace('/[^0-9]/','',$phoneNumber);

                if(strlen($phoneNumber) > 10) {
                    $countryCode = substr($phoneNumber, 0, strlen($phoneNumber)-10);
                    $areaCode = substr($phoneNumber, -10, 3);
                    $nextThree = substr($phoneNumber, -7, 3);
                    $lastFour = substr($phoneNumber, -4, 4);

                    $phoneNumber = '+'.$countryCode.' ('.$areaCode.') '.$nextThree.'-'.$lastFour;
                }
                else if(strlen($phoneNumber) == 10) {
                    $areaCode = substr($phoneNumber, 0, 3);
                    $nextThree = substr($phoneNumber, 3, 3);
                    $lastFour = substr($phoneNumber, 6, 4);

                    $phoneNumber = '('.$areaCode.') '.$nextThree.'-'.$lastFour;
                }
                else if(strlen($phoneNumber) == 7) {
                    $nextThree = substr($phoneNumber, 0, 3);
                    $lastFour = substr($phoneNumber, 3, 4);

                    $phoneNumber = $nextThree.'-'.$lastFour;
                }
                else
                {
                    $sub = "";
                    while(strlen($phoneNumber) >= 3)
                    {
                        if( strlen($phoneNumber) >= 3 && (strlen($phoneNumber) % 2 != 0) )
                        {
                            $sub = $sub.substr($phoneNumber, 0, 3)." ";
                            $phoneNumber = substr($phoneNumber, 3);
                        }
                        else
                        if( (strlen($phoneNumber) % 2 == 0) && strlen($phoneNumber) >= 2 )
                        {
                           $sub = $sub.substr($phoneNumber, 0, 2)." ";
                           $phoneNumber = substr($phoneNumber, 2);
                        }
                    }

                    if( strlen($phoneNumber) > 0)
                    {
                        $sub = $sub.$phoneNumber." ";
                    }

                    $phoneNumber = trim($sub," ");

                }

                return $countryCode." ".$phoneNumber;
            }

Задача. Есть большой список телефонных номеров, которые нужно переформатировать под единый формат (или форматы). Номера есть нескольких типов 7, 10 и 11 значные. Для каждого из этих типов необходимо вывести номер телефона в своем формате.

В php есть такие функции как money_format и number_format, но нет такой функции как phone_format, этот пробел я и решил восполнить написав такую функцию для форматирования телефонных номеров.

/**
 * Форматирование телефонного номера
 * по шаблону и маске для замены
 *
 * @param string $phone
 * @param string|array $format
 * @param string $mask
 * @return bool|string
 */
function phone_format($phone, $format, $mask = '#')
{
    $phone = preg_replace('/[^0-9]/', '', $phone);

    if (is_array($format)) {
        if (array_key_exists(strlen($phone), $format)) {
            $format = $format[strlen($phone)];
        } else {
            return false;
        }
    }

    $pattern = '/' . str_repeat('([0-9])?', substr_count($format, $mask)) . '(.*)/';

    $format = preg_replace_callback(
        str_replace('#', $mask, '/([#])/'),
        function () use (&$counter) {
            return '${' . (++$counter) . '}';
        },
        $format
    );

    return ($phone) ? trim(preg_replace($pattern, $format, $phone, 1)) : false;
}

Использование

Передаем в качестве параметров не отформатированный номер телефона, шаблон и маску для замены. В качестве шаблона также можно передать массив ключи которого это количество цифр в телефоне, а значение шаблоны замены

$phones = array(
    '926 111-2233',
    '9261112233',
    '8 (926) 111 22 33',
    '8 926 111-22-33',
    '559-8833',
    '5598833',
    '',
    'qweqwe'
);

$formats = array(
    '7' => '###-##-##',
    '10' => '+7 (###) ### ####',
    '11' => '# (###) ### ####'
);

foreach ($phones AS $phone) {
    echo phone_format($phone, $formats, '#');
}

Результат выполнения радует глаз:

+7 (926) 111 2233
+7 (926) 111 2233
8 (926) 111 2233
8 (926) 111 2233
559-88-33
559-88-33

Данный сниппет не ставит перед собой цель определить город, регион или какой-либо другой параметр. Кроме того возникнут проблемы при использовании шаблонов для номеров “8 (123) 111-22-33” и “+7 (123) 111-22-33”. Возможно потом придумаю как поступать с такими номерами.

  1. Use the preg_match() Function to Format Phone Numbers in PHP
  2. Use the sprintf() Function to Format Phone Numbers in PHP

Format Phone Numbers in PHP

In this article, we will talk about different methods to format phone numbers using PHP. We will format the phone number from +13335092344 to 333-509-2344.

Use the preg_match() Function to Format Phone Numbers in PHP

We can use the built-in function preg_match() to format phone numbers. This function searches a specified pattern from a string. The correct syntax to use this function is as follows.

preg_match($pattern, $inputString, $matches, $flag, $offset);

The built-in function preg_match() has five parameters. The details of its parameters are as follows

Parameters Description
$pattern mandatory It is the pattern that we want to check in the given string.
$inputString mandatory It is the string for which we want to search the given pattern.
$matches optional If this parameter is given, then the function stores the result of the matching process in it.
$flags optional This parameter has two options: PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL. You can read its description here.
$offset optional It tells the function of where to start the matching process. Usually, the search starts from the beginning.

This function returns a boolean variable. It returns true if the given pattern exists. After extracting the numbers, we will print them in the required format.

The program below shows the way by which we can use PHP preg_match() function to format phone numbers.

<?php 
$number = '+12333509234';
echo("The original number is $number.n");
if(  preg_match( '/^+d(d{3})(d{3})(d{4})$/', $number,  $matches ) )
{
    $result = $matches[1] . '-' .$matches[2] . '-' . $matches[3];
}
echo("The formatted number is $result.");
?> 

We have used /^+d(d{3})(d{3})(d{4})$/ pattern to extract numbers from the string. The explanation of this pattern is as follows.

  • ^ is the symbol to match the start of the string.
  • + matches the + in the string. + is a special character in PHP to match one or more times of the preceding pattern. Therefore, we need to add before + to escape this special character.
  • d is used to match the single digit number from 0-9. d{3} means that it will match three consecutive numbers.

Output:

The original number is +12333509234.
The formatted number is 233-350-9234. 

Use the sprintf() Function to Format Phone Numbers in PHP

We can also use the sprintf() function to format phone numbers in PHP. This function gives several formatting patterns to format strings. We will extract the numbers using substr() function in several strings. After that, we will combine these strings in the required format using the sprintf() function. The correct syntax to use this function is as follows.

sprintf($formatString, $string1, $string2, ..., $stringN)

The sprintf() function accepts N+1 parameters. The detail of its parameters is as follows

Parameters Description
$formatString mandatory It is the format that will be applied to the given string or strings.
$string1, $string2, $stringN mandatory It is the string that we want to format. At least one string is mandatory.

The function returns the formatted string. We will use the format %s-%s-%s to combine the numeric strings. The program that combines two strings is as follows.

<?php 
$number = '+12333509234';
echo("The original number is $number.n");
$result = sprintf("%s-%s-%s",
              substr($number, 2, 3),
              substr($number, 5, 3),
              substr($number, 8));
echo("The formatted number is $result.");
?> 

Output:

The original number is +12333509234.
The formatted number is 233-350-9234.

PHP форматирование строковых шаблонов

Latest Version
Software License
PHP Version
Coverage Status
Total Downloads
Support mail

Пакет предоставляет возможность форматирования строковых шаблонов с использованием функций спецификаторов.

Возможности пакета:

  • форматирование строки и числа;
  • форматирование даты и времени на русском языке (месяцы и дни недели);
  • преобразование специальных символов в HTML-сущности;
  • преобразование HTML-сущностей обратно в соответствующие символы;
  • форматирование размера памяти;
  • форматирование времени;
  • склонение слов после числительных;
  • форматирование номера телефона;
  • форматирование цены;
  • условные конструкции (if, elseif, else, endif);
  • собственные функции спецификаторы;
  • возможность задать сокращения для функций спецификаторов;
  • применение функций спецификаторов цепочкой к одному значению.

Установка

Установить этот пакет можно как зависимость, используя Composer.

composer require fi1a/format

Использование

use Fi1aFormatFormatter;

Formatter::format('[{{user:login}}] - {{user:name}}', ['user' => ['name' => 'John', 'login' => 'john85']]); // [john85] - John

Formatter::format('{{0}}, {{1}}',[1, 2]); // 1, 2

Formatter::format('{{}}, {{}}',[1, 2]); // 1, 2

Formatter::format('{{foo}}, {{foo}}, {{foo}}', ['foo' => 'bar',]); // bar, bar, bar

При отсутствии ключа в массиве значений выбрасывается исключение Fi1aFormatASTExceptionNotFoundKey

use Fi1aFormatFormatter;
use Fi1aFormatASTExceptionNotFoundKey;

try {
    Formatter::format('{{not_exists}}', []);
} catch (NotFoundKey $exception) {
    
}

Все значения преобразовываются в специальные символы HTML-сущности, с помощью функции htmlspecialchars.
Для того чтобы преобразовать обратно, воспользуйтесь функцией спецификатором unescape или передайте четвертым аргументом
значение false отменяющее автоматическое преобразование специальных символов в HTML-сущности.

use Fi1aFormatFormatter;

Formatter::format('{{value}}', ['value' => '&']); // "&amp;"

Formatter::format('{{value|unescape}}', ['value' => '&']); // "&"
// или
Formatter::format('{{value}}', ['value' => '&'], [], false); // "&"

C доступом по пути

Строковый шаблон содержит путь до значения в ассоциативном массиве.

use Fi1aFormatFormatter;

Formatter::format('[{{user:login}}] - {{user:name}}', ['user' => ['name' => 'John', 'login' => 'john85']]); // [john85] - John

C доступом по индексам

Строковый шаблон содержит индексы значений в массиве.

use Fi1aFormatFormatter;

Formatter::format('{{0}}, {{1}}',[1, 2]); // 1, 2
Formatter::format('{{}}, {{}}',[3, 4]); // 3, 4

Экранирование спец. символов

Для экранирования спец. символов используется символ «».

use Fi1aFormatFormatter;

Formatter::format('\{{0\}}', [0 => 'foo']); // {{0}}
Formatter::format('{{0}}', [0 => 'foo']); // foo

Для экранирования всех спец. символов в строке,
можно воспользоваться функцией escape класса Fi1aFormatSafe:

use Fi1aFormatFormatter;
use Fi1aFormatSafe;

Formatter::format(Safe::escape(('{{0}}'), [0 => 'foo']); // {{0}}

Для того чтобы убрать экранирование спец. символов в строке,
можно воспользоваться функцией unescape класса Fi1aFormatSafe:

use Fi1aFormatFormatter;
use Fi1aFormatSafe;

Formatter::format(Safe::unescape(('\{{0}}'), [0 => 'foo']); // foo

Использование функций спецификаторов

Доступные функции спецификаторов:

  • date — форматирование даты и времени;
  • sprintf — форматирование строки и чисел;
  • escape — преобразует специальные символы в HTML-сущности;
  • unescape — преобразует специальные HTML-сущности обратно в соответствующие символы;
  • memory — форматирование размера памяти (x.x Б, x.x КБ, x.x МБ, x.x ГБ, x.x ТБ, x.x ПБ);
  • time — форматирование времени (< 1 сек., x сек., x мин., x ч., x д.);
  • declension — склонение слов после числительных;
  • phone — форматирование номера телефона (+7(ddd)ddd-dddd);
  • price — форматирование цены.

Указание функции спецификатора следует после указания ключа с разделителем «|».

use Fi1aFormatFormatter;

Formatter::format('{{0|sprintf("04d")}}-{{1|sprintf("02d")}}-{{2|sprintf("02d")}}',[2016, 2, 27,]); // 2016-02-27

Модификаторы функций спецификаторов можно динамически задавать через массив передаваемый третьим аргументом функции format.

use Fi1aFormatFormatter;

Formatter::format('{{value|sprintf(modifier)}}', ['value' => 100.5], ['modifier' => '01.2f']); // 100.50

Возможно указание функций спецификатора цепочкой с разделителем «|». Тогда значение будет передаваться последовательно,
по цепочке, от одной функции спецификатора к другой.

use Fi1aFormatFormatter;

Formatter::format('{{value|unescape|sprintf|escape}}', ['value' => 'a&b']); // "a&amp;b"

PHP форматирование строки и числа с помощью sprintf

Спецификаторы функции sprintf. Указание функции спецификатора следует после указания ключа с разделителем «|».

Форматирование строк и чисел. Спецификаторы используемые в функци sprintf.

  • b — Аргумент рассматривается как целое число и печатается в бинарном представлении.
  • c — Аргумент рассматривается как целое число и печатается как символ из таблицы ASCII с соответствующим кодом.
  • d — Аргумент рассматривается как целое число и печатается как целое число со знаком.
  • e — Аргумент считается за число в научной нотации (т.е. 1.2e+2). Спецификатор точности задает количество цифр после десятичной запятой. В более ранних версиях он задавал общее количество значащих цифр (т.е. после запятой выводилось на 1 символ меньше).
  • E — Аналогично спецификатору e, но использует заглавные символы (т.е. 1.2E+2).
  • f — Аргумент считается за число с плавающей точкой (с учетом локали).
  • F — Аргумент считается за число с плавающей точкой (без учета локали). Доступно с PHP 5.0.3.
  • o — Аргумент рассматривается как целое число и печатается в восьмеричном представлении.
  • s — Аргумент рассматривается и печатается как строка.
  • u — Аргумент рассматривается как целое число и печатается как беззнаковое целое число.
  • x — Аргумент рассматривается как целое число и печатается в шестнадцатеричном представлении (буквы будут в нижнем регистре).
  • X — Аргумент рассматривается как целое число и печатается в шестнадцатеричном представлении (буквы будут в верхнем регистре).

Использование символа заполнения

use Fi1aFormatFormatter;

Formatter::format('{{0|sprintf("'.9d")}}', [123]); // ......123
Formatter::format('{{0|sprintf("'.09d")}}', [123]); // 000000123

Целое с лидирующими нулями

use Fi1aFormatFormatter;

Formatter::format('{{0|sprintf("04d")}}-{{1|sprintf("02d")}}-{{2|sprintf("02d")}}', [2020, 6, 7]); // 2020-06-07

PHP форматирование даты и времени

Спецификаторы функции date, форматирование даты и времени. Указание функции спецификатора следует после указания ключа с разделителем «|».

Формат модификатора используемого в функции:

День

  • d — День месяца, 2 цифры с ведущим нулём (от 01 до 31).
  • D — Текстовое представление дня недели на русском языке (от Пн до Вс).
  • j — День месяца без ведущего нуля (от 1 до 31).
  • l — Полное наименование дня недели на русском языке (от Понедельник до Воскресенье).
  • N — Порядковый номер дня недели в соответствии со стандартом ISO 8601 (от 1 (понедельник) до 7 (воскресенье)).
  • S — Английский суффикс порядкового числительного дня месяца, 2 символа (st, nd, rd или th. Применяется совместно с j).
  • w — Порядковый номер дня недели (от 0 (воскресенье) до 6 (суббота)).
  • z — Порядковый номер дня в году (От 0 до 365).

Неделя

  • W — Порядковый номер недели года в соответствии со стандартом ISO 8601; недели начинаются с понедельника, начиная с 0. Например: 42 (42-я неделя года).

Месяц

  • F — Полное наименование месяца на русском языке, например, «Января» или «Марта» (от «Января» до «Декабря»).
  • f — Полное наименование месяца на русском языке, например, «Январь» или «Март» (от «Январь» до «Декабрь»).
  • m — Порядковый номер месяца с ведущим нулём (от 01 до 12).
  • M — Сокращённое наименование месяца на русском языке, 3 символа (от «Янв» до «Дек»).
  • n — Порядковый номер месяца без ведущего нуля (от 1 до 12).
  • t — Количество дней в указанном месяце (от 28 до 31).

Год

  • L — Признак високосного года (1, если год високосный, иначе 0.).
  • o — Номер года в соответствии со стандартом ISO 8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (Примеры: 1999 или 2003).
  • X — Расширенное полное числовое представление года, не менее 4 цифр, с — для годов до нашей эры и + для годов нашей эры. (Примеры: -0055, +0787, +1999, +10191).
  • x — Расширенное полное числовое представление, если требуется или стандартное полное числовое представление, если возможно (например, Y). Не менее четырёх цифр. Для годов до нашей эры указан префикс -. У годов после (и включая) 10000 префикс +. (Примеры: -0055, 0787, 1999, +10191).
  • Y — Полное числовое представление года, не менее 4 цифр, с — для годов до нашей эры. (Примеры: -0055, 0787, 1999, 2003, 10191.).
  • y — Номер года, 2 цифры (Примеры: 99, 03).

Время

  • a — Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре (am или pm).
  • A — Ante meridiem или Post meridiem в верхнем регистре (AM или PM).
  • B — Время в формате Интернет-времени (альтернативной системы отсчёта времени суток) (от 000 до 999).
  • g — Часы в 12-часовом формате без ведущего нуля (от 1 до 12).
  • G — Часы в 24-часовом формате без ведущего нуля (от 0 до 23).
  • h — Часы в 12-часовом формате с ведущим нулём (от 01 до 12).
  • H — Часы в 24-часовом формате с ведущим нулём (от 00 до 23).
  • i — Минуты с ведущим нулём (от 00 до 59).
  • s — Секунды с ведущим нулём (от 00 до 59).
  • u — Микросекунды. (Например: 654321).
  • v — Микросекунды. (Пример: 654).
  • v — Микросекунды. (Пример: 654).

Часовой пояс

  • e — Идентификатор часового пояса (Примеры: UTC, GMT, Atlantic/Azores).
  • I — Признак летнего времени (1, если дата соответствует летнему времени, 0 в противном случае.).
  • O — Разница с временем по Гринвичу без двоеточия между часами и минутами (Например: +0200).
  • P — Разница с временем по Гринвичу с двоеточием между часами и минутами (Например: +02:00).
  • p — То же, что и P, но возвращает Z вместо +00:00 (доступен, начиная с PHP 8.0.0) (Например: +02:00).
  • T — Аббревиатура часового пояса, если известна; в противном случае смещение по Гринвичу. (Примеры: EST, MDT, +05).
  • Z — Смещение часового пояса в секундах. Для часовых поясов, расположенных западнее UTC, возвращаются отрицательные числа, а для расположенных восточнее UTC — положительные. (от -43200 до 50400).

Полная дата/время

  • c — Дата в формате стандарта ISO 8601 (2004-02-12T15:19:21+00:00).
  • r — Дата в формате » RFC 222/» RFC 5322 (Например: Thu, 21 Dec 2000 16:01:07 +0200).
  • U — Количество секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT) (Смотрите также time()).

Ключи форматирования даты на русском языке

  • F — Полное наименование месяца на русском языке, например, «Января» или «Марта» (от «Января» до «Декабря»).
  • f — Полное наименование месяца на русском языке, например, «Январь» или «Март» (от «Январь» до «Декабрь»).
  • M — Сокращённое наименование месяца на русском языке, 3 символа (от «Янв» до «Дек»).
  • D — Текстовое представление дня недели на русском языке (от «Пн» до «Вс»).
  • l — Полное наименование дня недели на русском языке (от «Понедельник» до «Воскресенье»).
use Fi1aFormatFormatter;

Formatter::format('{{foo|date("d.m.Y")}}', ['foo' => time()]); // 28.09.2022
echo Formatter::format('{{|date("d F Y")}}', [time()]); // 18 Октября 2022
echo Formatter::format('{{|date("f")}}', [time()]); // Октябрь

Установить используемый формат по умолчанию:

use Fi1aFormatSpecifierDate;
use Fi1aFormatFormatter;

Formatter::format('{{foo|date}}', ['foo' => time()]); // 28.09.2022 07:06:00
Date::setDefaultFormat('d.m.Y');
Formatter::format('{{foo|date}}', ['foo' => time()]); // 28.09.2022

Функция спецификатор escape

Преобразует специальные символы в HTML-сущности {{|escape(flags, encoding, doubleEncode)}}

use Fi1aFormatFormatter;

Formatter::format('{{|escape}}', ['"test"']); // &quot;test&quot;

Функция спецификатор unescape

Преобразует специальные HTML-сущности обратно в соответствующие символы {{|escape(flags)}}

use Fi1aFormatFormatter;

Formatter::format('{{|unescape}}', ['&amp;quot;test&amp;quot;']); // "test"

PHP форматирование размера памяти

Функция спецификатор memory. Форматирование размера памяти.

use Fi1aFormatFormatter;

Formatter::format('{{|memory}}', [1024]); // 1.0 КБ
Formatter::format('{{|memory("B")}}', [1024]); // 1024.0 Б
Formatter::format('{{|memory}}', [1024 * 1024]); // 1.0 МБ

PHP форматирование времени

Функция спецификатор time, форматирование времени.

Доступные аргументы функции спецификатора:

  • seconds — результат форматирования в секундах;
  • minutes — результат форматирования в минутах;
  • hours — результат форматирования в часах;
  • days — результат форматирования в днях.

Если аргумент спецификатора не указан, форматирование осуществляется в наиболее подходящей размерности.

use Fi1aFormatFormatter;

Formatter::format('{{|time}}', [60 * 60]); // 1 ч.
Formatter::format('{{|time("minutes")}}', [60 * 60]); // 60 мин.
Formatter::format('{{|time}}', [2 * 24 * 60 * 60]); // 2 д.

PHP склонение слов после числительных

С помощью функции спецификатора declension можно склонять существительные после чисел.
Например: 1 год, 2 года, 5 лет.

use Fi1aFormatFormatter;

Formatter::format('{{year}} {{year|declension("год", "года", "лет")}}', ['year' => 1]); // 1 год
Formatter::format('{{year}} {{year|declension("год", "года", "лет")}}', ['year' => 2]); // 2 года
Formatter::format('{{year}} {{year|declension("год", "года", "лет")}}', ['year' => 5]); // 5 лет

Модификаторы функции спецификатора склонения существительного после числа:

  • первый модификатор задает текст для единичных значений;
  • второй для значений с 2-х до 4-х;
  • третий для всех остальных.

Форматирование телефонных номеров

С помощью функции спецификатора phone можно форматировать номера телефонов по заданной маске (формату):

use Fi1aFormatFormatter;

Formatter::format('{{value|phone("+7(ddd)ddd-dddd")}}', ['value' => '+79228223576']); // +7(922)822-3576
Formatter::format('{{value|phone("+7(ddd)ddd-dddd")}}', ['value' => '9228223576']); // +7(922)822-3576
Formatter::format('{{value|phone("(dddd)dd-dd-dd")}}', ['value' => '(6783)44-00-44']); // (6783)44-00-44

Форматирование числа

С помощью функции спецификатора number можно форматировать числа:

Модификаторы функции спецификатора форматирования числа:

  • int decimals (2) — число знаков после запятой;
  • string decimalSeparator (‘.’) — разделитель дробной части;
  • string thousandsSeparator (») — разделитель тысяч;
  • bool allowZeroDecimal (false) — разрешить вывод 0 в конце дробной части.
use Fi1aFormatFormatter;

Formatter::format('{{value|number}}', ['value' => 100.00]); // 100

Formatter::format(
    '{{value|number(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}}',
    ['value' => 100100.00],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => true,
    ]
); // 100 100.00

Formatter::format(
    '{{value|number(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}}',
    ['value' => 100100.00],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
    ]
); // 100 100

Formatter::format(
    '{{value|number(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}}',
    ['value' => 100100.12],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
    ]
); // 100 100.12

Для упрощения ввода функций спецификаторов форматирования числа, воспользуйтесь сокращением.

use Fi1aFormatFormatter;

Formatter::addShortcut('number', 'number(2, ".", " ", false)');
Formatter::format('{{value|~number}}', ['value' => 100100.12]); // 100 100.12
Formatter::format('{{value|~number}}', ['value' => 100100]); // 100 100

PHP форматирование цены

С помощью функции спецификатора price можно форматировать цены:

Модификаторы функции спецификатора форматирования цены:

  • int decimals (2) — число знаков после запятой;
  • string decimalSeparator (‘.’) — разделитель дробной части;
  • string thousandsSeparator (») — разделитель тысяч;
  • bool allowZeroDecimal (false) — разрешить вывод 0 в конце дробной части.
  • int round (null) — округляет цену. Передавать константы: PHP_ROUND_HALF_UP — округляет от нуля, когда следующий знак находится посередине, PHP_ROUND_HALF_DOWN — округляет к нулю, когда следующий знак находится посередине.
  • int roundPrecision (0) — количество десятичных знаков, до которых производится округление.
  • bool floor (false) — округляет в меньшую сторону (до целового).
use Fi1aFormatFormatter;

Formatter::format('{{value|price}} руб.', ['value' => 100.00]); // 100 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}} руб.',
    ['value' => 100100.00],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => true,
    ]
); // 100 100.00 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}} руб.',
    ['value' => 100100.00],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
    ]
); // 100 100 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal)}} руб.',
    ['value' => 100100.12],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
    ]
); // 100 100.12 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal, round, roundPrecision)}} руб.',
    ['value' => 100100.5],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
        'round' => PHP_ROUND_HALF_UP,
        'roundPrecision' => 0,
    ]
); // 100 101 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal, round, roundPrecision)}} руб.',
    ['value' => 100100.5],
    [
        'decimals' => 2,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
        'round' => PHP_ROUND_HALF_DOWN,
        'roundPrecision' => 0,
    ]
); // 100 100 руб.

Formatter::format(
    '{{value|price(decimals, decimalSeparator, thousandsSeparator, allowZeroDecimal, round, roundPrecision, floor)}} руб.',
    ['value' => 100100.6],
    [
        'decimals' => 0,
        'decimalSeparator' => '.',
        'thousandsSeparator' => ' ',
        'allowZeroDecimal' => false,
        'round' => null,
        'roundPrecision' => 0,
        'floor' => true,
    ]
); // 100 100 руб.

Для упрощения ввода функций спецификаторов форматирования цены, воспользуйтесь сокращением.

use Fi1aFormatFormatter;

Formatter::addShortcut('price', 'price(0, ".", " ", false, null, 0, true)');
Formatter::format('{{value|~price}} руб.', ['value' => 100100.6]); // 100 100 руб.

Условные конструкции

Доступны следующий условные конструкции: if, elseif, else, endif.
При отсутствии ключа в массиве значений исключение не выбрасывается.

use Fi1aFormatFormatter;

Formatter::format('{{if(foo)}}{{bar}}{{else}}false{{endif}}', ['foo' => true, 'bar' => 'bar']); // bar

Formatter::format('{{if(not_exists)}}{{foo}}{{elseif(bar)}}{{bar}}{{endif}}', ['foo' => 'foo', 'bar' => 'bar']); // bar

Возможно использование функций спецификаторов в условных конструкциях:

use Fi1aFormatFormatter;

Formatter::format('{{if(value|unescape==="a&b")}}{{value}}{{endif}}', ['value' => 'a&b']); // "a&amp;b"

Добавление функций спецификаторов

Класс функции спецификатора должен реализовывать интерфейс Fi1aFormatSpecifierISpecifier

Добавление новой функции спецификатора осуществляется с помощью метода Fi1aFormatFormatter::addSpecifier():

use Fi1aFormatFormatter;

Formatter::addSpecifier('spf', Specifier::class); // true

Formatter::format('{{foo|spf(true)}}', ['foo' => 'foo']); // foo

Сокращения

Для упрощения ввода функций спецификаторов можно использовать сокращения.
Сокращения добавляются методом Formatter::addShortcut с указанием имени сокращения.
Для использования сокращения, введите название начиная с символа «~».

use Fi1aFormatFormatter;

Formatter::addShortcut('dt', 'date("d.m.Y", "en")');
Formatter::format('{{foo|~dt}}', ['foo' => time()]); // 29.09.2022

Получаем телефон из поля, который записан в виде цифр – 73123123123, и форматируем его в более читаемый вид – 7 (312) 312-31-23.

При помощи функции форматирования строки sprintf и функции substr выводим наш набор цифр в более читаемый вид. Хорошо если на вашем сайте установлена js маска, и все телефоны подгоняются сразу под нужный формат. Но там где этого нет на помощь может прийти PHP.

Давайте глянем код. В переменной $params[“BUYER_PERSON_COMPANY_PHONE”] находится наша строка в виде чисел.

$from = $params["BUYER_PERSON_COMPANY_PHONE"]; // 73123123123
$to = sprintf("%s (%s) %s-%s-%s",
	substr($from, 0, 1),
	substr($from, 1, 3),
	substr($from, 4, 3),
	substr($from, 7, 2),
	substr($from, 9)
);
echo "тел.: ". $to; // 7 (312) 312-31-23

Первым параметром мы задаем маску, размечая части при помощи %s. Обратите внимание, в самой маске вы можете задать различные символы, главное правильно “порезать” наш телефон.

При помощи substr формируем нужные нам отрезки строки – первый параметр это наша строка ($from), второй параметр это с какого символа вырезаем, и, тут внимание, сколько символов берем после второго параметра. Не путайте, это не промежуток от символа до символа.

Надеюсь у вас всё получилось 🙂

Понравилась статья? Поделить с друзьями:
  • Формат украинского номера телефона
  • Формат турецкого номера телефона
  • Формат стационарного номера телефона
  • Формат российских номеров телефонов
  • Формат омутнинск номер телефона