# # 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'; }