Skip to main content

PHP: Formatera telefonnummer

06/10/2013 - telefonnummer, php
Jag hade ett behov av att normalisera telefonnummer i en lista som var ifyllda av användare, så dom såg lite hur som helst ut. Så jag skrev en funktion för att normalisera telefonnummer som ser ut så här:
function phone_number($nr, $formats = false){
    if (empty($GLOBALS["areacodes"])){
      if (file_exists("$GLOBALS[data_dir]/Atlas/Areacodes/$GLOBALS[language].txt")){
        $GLOBALS["areacodes"] = array_filter(explode("\n", file_get_contents("$GLOBALS[data_dir]/Atlas/Areacodes/$GLOBALS[language].txt")));
      }
    }
    if ($formats === true){
      $number = preg_replace("/[^\d\+]/", "", $nr);
      if (preg_match("/^00/", $number)){
        $number = preg_replace("/^00/", "+", $number);
      } elseif (preg_match("/^0[1-9]/", $number)) {
        switch ($GLOBALS["language"]){
          case "se":
            $number = "+46" . preg_replace("/^0/", "", $number);
            break;
        }
      }

      return $number;
    }
    if (!$formats)
      $formats = ["### ##", "## ## ##", "### ## ##", "### ### ##"];
    if (!empty($GLOBALS["phone_formats"]))
      $formats = explode("\n", $GLOBALS["phone_formats"]);
    $country = false;
    if (!empty($GLOBALS["areacodes"])){
      if (preg_match("/^\+(\d{2})/", $nr, $m)){
        $country = "+" . $m[1];
        if ($m[1] == 46 && $GLOBALS["language"] == "se"){
          $country = false;
          $nr = preg_replace("/^\+46/", "0", $nr);
        } else {
          $nr = preg_replace("/^\+\d{2}/", "", $nr);
        }
      }
      $number = preg_replace("/[^\d\+]/", "", $nr);
      $cd = join("|", $GLOBALS["areacodes"]);
      if (preg_match("/^($cd)(.*)$/", $number, $m)){
        $digits = preg_split("//", $m[2], -1, PREG_SPLIT_NO_EMPTY);
        $numlen = count($digits);
        foreach ($formats as $f){
          $charnum = substr_count($f, "#");
          if ($charnum == $numlen){
            $lnr = 0;
            foreach (preg_split("//", $f, -1, PREG_SPLIT_NO_EMPTY) as $c){
              if ($c == "#"){
                $out[] = $digits[$lnr];
                $lnr++;
              } else {
                $out[] = $c;
              }
            }
            if (!empty($out)){
              return $country . $m[1] . "-" . trim(join("", $out));
            }
          }
        }
      }
    }

    return $country . $nr;
  }
Så, först så kan man skicka med en array med de format man vill använda, annars så har funktionen en uppsättning med format. Dessa format gäller numret efter riktnumret, så en fil med riktnummer krävs också. Funktionen laddar en fil med det språkval som sidan i fråga har, så man får rätt lands riktnummer. Det är en lista med giltiga riktnummer, en per rad.
Sedan matchar vi numret med ett giltigt riktnummer och om det finns så går vi igenom formaten och ställer upp siffrorna efter hash-tecknena, så "0701234567" + "### ## ##" blir "070-123 45 67", behändigt!
Mer i Tutorials
PHP och BankID
Skapa sn i Photoshop
Modellera URLar
PHP Formatera telefonnummer
Skapa ett Netflixprogram
Expandera korta URLar
Parsea hashtaggar
Nyckelord: telefonnummer or php
OAuth fungerar inte
Hur nya iPaden stller till det p webben
Layoutmotor fr Atlas
Bygg MySQLqueries automatiskt
Min feed
Rkna tid med PHP
Nytt projekt på gång: Ljussablar som ljuskälla
Hemma-Spa klart!
Alien: Romulus
Börjar likna en bar!
Reglar på plats
Rivning pågår!
Mjölner!
Örnen börjar bli redo för Sweden Rock
Utebar!
Mixtejp
Norrsken
Kan ha "råkat" skaffa något på Sci-Fi-mässan
Recension: Steam Hotell
Det börjar ta form med hemma-spa:et
Rostfärg och IKEA-lampa
Create a physical book from my digital book
Survey Island
Someone is trying to sell my map!
Julkalender
Myst book updated
Recension: Yasuragi Ryokan Hanare
Recension: Ad Astra
Ny tatuering - midgårdsormen!
Minnestal till en kaffekopp
Förlovade
Sweden Rock 2023
Ny nummerskylt för huset
Fix i husbilen
Grubbelgubbe
Uppdateringar i verkstaden!
Måla med rostfärg
Vårfix i trädgården
Jung Kook
Pappaskämt och annan humor
Bilder på spelbordet när det används
Använda laserskäraren för att skapa innehål...
Julklappar med laserskärare
Budget-Spa
Nyckelskåp
Fjällkaffe
1/20 DeLorean Time Machine
Caso Outdoor Cooler
Minikyl Coca Cola
Verktygsvagn med verktyg, 161 delar
CSS filters for background images
Huset ommålat!
Skiss för tatuering
Spelbordet klart
Laser cutting my Myst Island
We Can Do It