rendered paste body#
# format_number()
# ---------------
# Convert a Caller*ID number into a more readable format.
#
sub format_number
{
my $number = shift;
#
# check for SIP/IAX addresses and return intact if found
#
if ($number =~ /\@/) {
return $number if $number =~ /^iax\d?:/i;
$number =~ s/^(sip:)*/sip:/i;
return $number;
}
#
# number is a telephone number so format it if we recognise
# the origin
#
$number =~ s/\D//g;
$number =~ s/^$PSTN_PREFIX//;
if ($number =~ /^02/) { # UK (London etc.)
$number =~ s/^(\d{3})(\d{4})/($1) $2 /;
}
elsif ($number =~ /^08/) { # UK non-geo
$number =~ s/^(\d{4})/($1) /;
}
elsif ($number =~ /^0[^0]/) { # UK national
$number =~ s/^(\d{5})(\d{3})/($1) $2 /;
}
elsif ($number =~ /^001/) { # US/CA
$number =~ s/^001(\d{3})(\d{3})/+1 ($1) $2 /;
}
elsif ($number =~ /^0035/) { # Finland
$number =~ s/^00(35\d)/+$1 /;
}
elsif ($number =~ /^00[34]/) { # France, Germany, Netherlands, Austria
$number =~ s/^00(3\d)/+$1 /;
}
elsif ($number =~ /^00800/) { # International freephone
$number =~ s/^00800(\d{3})/+800 $1 /;
}
elsif ($number =~ /^00/) { # Other international
$number =~ s/^00/+/;
}
elsif ($number =~ /^5\d{3}/) { # IAX links to companies
$number =~ s/^(5)(\d{3})/$1 $2 /;
}
elsif ($number =~ /^7\d/) { # Various free services, such as FWD
$number =~ s/^(7\d)/$1 /;
}
return $number ? " $number" : 'Number unavailable or witheld';
}