Hello

For a project i started creating a formatter for belgium phone numbers. It had to happen quickly so for the moment i don't have verry much. But maybe with the help of others we can make it like it should be.

For the moment i have:

  • Only works when display is set to locale, global function isen't ready yet but can't be verry hard.
  • Checks if its a mobile or fixed phone number
  • Checks the zone number and format the phone number like 050 512 512 or 09 212 21 21

Any improvements or extensions are verry welcome!

Here is the code


/**
 * @file
 * CCK Field for Belgium phone numbers.
 */




/**
 * Local formatter for local phone number.
 *
 * @param $element
 *   $element['#item']['country_codes']: alpha-2 country code
 *   $element['#item']['number']: phone number
 * @param $error
 *   The error message to shown to user.
 *   Available parameters to use in the error message are
 *   - "%countrycode": the alpha-2 CC
 *   - "%phone_input": the original number input by user (could be invalid)
 *   - "%max_length": allowed maximum length of the phone number
 * @return boolean
 *   TRUE if it is a valid phone number for that country, FALSE otherwise.
 */
function be_formatter_local($element) {
  //arrays with zonenrs
  $gsm=array(47,48,49);
  $zone3=array(67,53,63,50,71,60,83,52,13,82,86,89,11,14,85,57,56,64,16,61,4,15,65,81,58,54,67,59,51,55,80,12,69,14,87,58,19,10,50);
  
  //get the zonenr
  $zonenr = substr($element['#item']['number'], 0, 2);
  
  //check for mobile
  if(in_array($zonenr, $gsm)){
    $phone=format_mobile_numbers('0'.$element['#item']['number']); 
  //check for fix with format 3  
  }elseif(in_array($zonenr, $zone3)){
    $phone=format_fix_numbers('0'.$element['#item']['number'], $format=3);
  //must be fix with format 2  
  }else{
    $phone=format_fix_numbers('0'.$element['#item']['number'], $format=2);
  }
  
  return $phone;
}

function format_mobile_numbers($number){
    $item=$number;
    $number=array();
    $number[0]=substr($item,0,4);
    $number[1]=substr($item,4,2);
    $number[2]=substr($item,6,2);
    $number[3]=substr($item,8,2);
    $phone=$number[0].' '.$number[1].' '.$number[2].' '.$number[3];   
    return $phone;
}

function format_fix_numbers($number, $format){
    $item=$number;
    $number=array();
    switch($format){
      case '2':
        $number[0]=substr($item, 0, 2);
        $number[1]=substr($item,2,3);
        $number[2]=substr($item,5,2);
        $number[3]=substr($item,7,2);
        $number[4]=substr($item,9);
        $phone=$number[0].' '.$number[1].' '.$number[2].' '.$number[3].' '.$number[4];
        break;

      case '3':
        $number[0]=substr($item, 0, 3);
        $number[1]=substr($item,3,3);
        $number[2]=substr($item,6,3);
        $phone=$number[0].' '.$number[1].' '.$number[2];
        break;  
    }
    
    return $phone;
       
}

grts

fre

Comments

Frederic wbase’s picture

Status: Active » Needs work

changing status to needs work ;-)

g1smd’s picture

A RegEx-based pattern match will match faster and more efficiently then an array-based match.