mattwilliamson
8/14/2013 - 10:03 PM

Formats phone numbers to US or E164

Formats phone numbers to US or E164

function formatNumber(number) {
    number = number.replace(/\D+/g, '');
    number = number.replace(/^(1)(\d{0,2})$/, '$1($2');
    number = number.replace(/^(1)(\d{3})$/, '$1($2)');
    number = number.replace(/^(1)(\d{3})(\d{1,3})$/, '$1($2) $3');
    number = number.replace(/^(1)(\d{3})(\d{3})(\d{1,4})$/, '$1($2) $3-$4');
    number = number.replace(/^(1)(\d{3})(\d{3})(\d{4})(\d+)$/, '$1($2) $3-$4 x$5');
    number = number.replace(/^(1)(.*)/, '$1 $2');

    return '+' + number;
}

// US (Starts with 1)

// formatNumber('1')
// "+1 ("

// formatNumber('1555')
// "+1 (555)"

// formatNumber('155')
// "+1 (55"

// formatNumber('1555.11')
// "+1 (555) 11"

// formatNumber('1555.111')
// "+1 (555) 111"

// formatNumber('1555.111-')
// "+1 (555) 111"

// formatNumber('1555.111*345')
// "+1 (555) 111-345"

// formatNumber('1555.111*3455')
// "+1 (555) 111-3455"

// formatNumber('1555.111*3455#112233')
// "+1 (555) 111-3455 x112233"




// All others E164

// formatNumber('00 98 87 56')
// "+00988756"