Skip to main content

PHP: Formatera telefonnummer

10 Jun 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($nr)) return 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
Create snow in 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
Build MySQLqueries automatically
Min feed
Rkna tid med PHP
Borta Bra
Sweden Rock!
Borta Bra
Plåtis?
Nordic: The Musical
Första skiss


En första skiss på Balders fall. Detta är Freja efter att Loke lurat Höder att skjuta Balder. Hela stycket kommer vara mycket längre. Men som sagt, en skiss
Nordic: The Musical
Studiomusik i stort sett klar för Himlen Brinner


Nu är Himlen Brinner uppdaterad med helt ny studiomusik av Emil. Vi har jobbat fram ett sound som känns passande för Tor och Mjölner och lagt in saker som åsknedslag och hammarslag på städ för att accentuera vissa delar av stycket.
Rumpa
Borta Bra
Recension: Högbo Hotell & Spa
Uppdaterade skyltar hemma
En söt liten skärbräda
eklundh.com
Atlas Embed
Matat Sigge?
Ordning och reda i legobyggandet
"Flärp" till ismaskinen
God jul!
Hemma Bäst
Fondvägg för gillestugan
Tagalot
E-ink screen
Garbage Pail Kids
Hemma Bäst
Nya lådor i kontoret
Ostkupa
Stranger Things, säsong 5
Första december!
Myst Book
Web versions of the journals
Predator: Badlands
Myst Book
Selenitic Age
Ny kamera, gammal glöd
Tekoppen
Årets Halloweenfest var mycket lyckad!
Porträtt av t-o-m-u-s-a
Porträtt av u/arielgirle
Profilporträtt
GameConnect
Ny PC!
50 år
Hemma Bäst
Garageuppfart för husbil: Uppfarten är klar!
Ny kamera: Nikon Zf
Hemma Bäst
Garageuppfart för husbil: Massa grus!
The lightsabers are done!
Hemma Bäst
Garageuppfart för husbil: Lagt ut plattor och skyfflat makadam
Hemma Bäst
Garageuppfart för husbil: Grävt och klart!
Hemma Bäst
Pooltak
Nordic: The Musical
Valkyrior
Tekoppen
Kräftskiva och eldfest på Tekoppen!
Lord of the Rings timeline
Alien Timeline
Borta Bra
Snart är det Medeltidsveckan!
Hemma Bäst
Utebar: Pergola
Hemma Bäst
Utebar: Refrigerator and bar stools
Hemma Bäst
Utebar: Cupboard doors
Nordic: The Musical
Lokes Vrede
Hemma Bäst
Garageuppfart för husbil: Garageuppfart för husbil!
Arkad- och flipperkabinett
Robotar
Nordic: The Musical
Blodsbröder