r3b
5/30/2017 - 6:02 PM

US phone number formatter

US phone number formatter

(function (app) {
  "use strict";

  function format_nanp(num) {
    return num
      .replace(/[^0-9]/g, '')
      .replace(/^\+?1?(\d{1,3})(\d{0,3})(\d{0,4})(.*)/, function replacer(
        match,
        p1, p2, p3, p4, offset, string) {
        return `(${p1}) ${p2}-${p3}` + ((p4) ? ' ext. ' + p4 : '');
      });
  }

  app.directive('formatNanp', function ($filter, $browser) {
    return {
      link: function ($scope, $element, $attrs) {
        var ctrlCodes = [15, 16, 17, 18, 19, 37, 38, 39, 40, 91];

        function listener() {
          $element.val(format_nanp($element.val()));
        };
        $element.bind('keydown', function (event) {
          if (ctrlCodes.indexOf(event.keyCode) === -1) {
            $browser.defer(listener);
          }
        });

        $element.bind('change paste cut', function () {
          $browser.defer(listener);
        });
      }
    };
  });
})(angular.module('testApp', []));