Formatting Phone Number

Formatting Phone Number

The telephone fields in account, contact and lead entities do not really come with any formatting rules for particular countries. The phone field format setting might resolve some issues, but not all of them.

Let’s take the following scenarios of users entering phone numbers:

Input Value Output Value
1234567 123-4567
444 555 6789 (444) 555-6789
1-800-434-5454 (800) 434-5454

In order to resolve this issue we first get remove all of the non-numeric characters. This logic might require if you want to support extensions. Once we remove the non-numeric characters, we need to check the length of the phone number and apply our business rules based on that.

The following JavaScript code takes care of this situation:

function formatPhoneNumber()
{
    var phoneNumber = Xrm.Page.getAttribute("telephone1").getValue()
    var fixedNumber = string.replace(/[^0-9]/g, '');

    var output = "";
    switch (fixedNumber.length)
    {
        case 7:
            output = fixedNumber.substring(0, 3) + "-" + fixedNumber.substring(4, 7);
            break;
        case 10:
            output = "(" + fixedNumber.substring(0, 3) + ") " + fixedNumber.substring(4, 6) + "-" + fixedNumber.substring(7, 10);
            break;
        case 11:
            if (fixedNumber.substring(0, 1) == "1")
                output = "(" + fixedNumber.substring(1, 4) + ") " + fixedNumber.substring(5, 7) + " " + fixedNumber.substring(8, 11);
            else
                output = fixedNumber;
            break;
        default:
            // Error No Output
            output = phoneNumber
            break;
    }
    Xrm.Page.getAttribute("telephone1").setValue(output);
}

You can modify the code above to accept the name of the field instead of hard coding it, so that the same logic can be applied to multiple controls

function formatPhoneNumber(fieldName)
{
    var phoneNumber = Xrm.Page.getAttribute(fieldName).getValue()

    // Phone Number formatting logic comes here
    Xrm.Page.getAttribute(fieldName).setValue(output);
}