Skip to main content

PHP
Formatera telefonnummer

10 June 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
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
Hemma Bäst
Garageuppfart för husbil: Massa grus!
Ljussablarna är klara!
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: Kylskåp och barstolar
Hemma Bäst
Utebar: Skåpdörrar
Hemma Bäst
Garageuppfart för husbil: Garageuppfart för husbil!
Arkad- och flipperkabinett
Robotar
Nordic: The Musical
Blodsbröder
Nordic: The Musical
Midgård
Nordic: The Musical
Himlen brinner
Nordic: The Musical
Gudarnas spel
Nordic: The Musical
Oändlig kärlek
Ljussabel-projektet
Hemma Bäst
Skåp till Ute-TV
Thåström i Globen
Bröllopspresent
Födelsedagspresent
Borta Bra
Recension: Jacy's
Thåström
Nordic: The Musical
Kunskapens pris
Nordic: The Musical
Livets träd
Nordic: The Musical
Allting börjar alltid någonstans
Borta Bra
Recension: Bohusgården Hotell & Konferens
Borta Bra
Recension: Elite Palace
Nytt projekt på gång: Ljussablar som ljuskälla
Hemma Bäst
Hemmaspa: Hemma-Spa klart!
Alien: Romulus
Hemma Bäst
Utebar: Utebaren klar!
Hemma Bäst
Utebar: Börjar likna en bar!
Hemma Bäst
Utebar: Reglar på plats
Hemma Bäst
Utebar: Rivning pågår!
Mjölner!
Borta Bra
Örnen börjar bli redo för Sweden Rock
Hemma Bäst
Utebar: Utebar!
Mixtejp
Norrsken
Space Jockey
3D Settlers of Catan
Kan ha "råkat" skaffa något på Sci-Fi-mässan
Borta Bra
Recension: Steam Hotell
Hemma Bäst
Hemmaspa: Det börjar ta form med hemma-spa:et