All pastes #1165 Raw Edit

kevin

public text v1 · immutable
#1165 ·published 2004-09-29 04:29 UTC
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';
}