Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
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
Comment #1
Frederic wbase CreditAttribution: Frederic wbase commentedchanging status to needs work ;-)
Comment #2
g1smd CreditAttribution: g1smd commentedA RegEx-based pattern match will match faster and more efficiently then an array-based match.