Format telephone and credit card numbers in AngularJS

前端 未结 17 2097
猫巷女王i
猫巷女王i 2020-11-30 18:29

Question one (formatting telephone number):

I\'m having to format a telephone number in AngularJS but there is no filter for it. Is there a way to u

相关标签:
17条回答
  • 2020-11-30 19:08

    Here is the way I created ssn directive which checks for the the pattern and I have used RobinHerbots jquery.inputmask

    angular.module('SocialSecurityNumberDirective', [])
           .directive('socialSecurityNumber', socialSecurityNumber);
    
    function socialSecurityNumber() {
        var jquery = require('jquery');
        var inputmask = require("jquery.inputmask");
        return {
            require: 'ngModel',
            restrict: 'A',
            priority: 1000,
            link: function(scope,element, attr, ctrl) {
    
                var jquery_element = jquery(element);
                jquery_element.inputmask({mask:"***-**-****",autoUnmask:true});
                jquery_element.on('keyup paste focus blur', function() {
                    var val = element.val();    
                    ctrl.$setViewValue(val);
                    ctrl.$render();
    
                 });
    
                var pattern = /^\d{9}$/;
    
                var newValue = null;
    
                ctrl.$validators.ssnDigits = function(value) {
                     newValue = element.val();
                    return newValue === '' ? true : pattern.test(newValue);    
                };
            }
        };
    }
    
    0 讨论(0)
  • 2020-11-30 19:14

    You also can check input mask formatter.

    This is a directive and it's called ui-mask and also it's a part of angular-ui.utils library.

    Here is working: Live example

    For the time of writing this post there aren't any examples of using this directive, so I've made a very simple example to demonstrate how this thing works in practice.

    0 讨论(0)
  • 2020-11-30 19:16

    enter image description here

    I also found that JQuery plugin that is easy to include in your Angular App (also with bower :D ) and which check all possible country codes with their respective masks : intl-tel-input

    You can then use the validationScript option in order to check the validity of the input's value.

    0 讨论(0)
  • 2020-11-30 19:17

    Inject 'xeditable' module in your angular app(freely available):

    var App = angular.module('App', ['xeditable']);

    And then use its built in feature in your HTML code as follows:

    <div>{{ value|number:2 }}</div>

    0 讨论(0)
  • 2020-11-30 19:19

    Also, if you need to format telephone number on output only, you can use a custom filter like this one:

    angular.module('ng').filter('tel', function () {
        return function (tel) {
            if (!tel) { return ''; }
    
            var value = tel.toString().trim().replace(/^\+/, '');
    
            if (value.match(/[^0-9]/)) {
                return tel;
            }
    
            var country, city, number;
    
            switch (value.length) {
                case 10: // +1PPP####### -> C (PPP) ###-####
                    country = 1;
                    city = value.slice(0, 3);
                    number = value.slice(3);
                    break;
    
                case 11: // +CPPP####### -> CCC (PP) ###-####
                    country = value[0];
                    city = value.slice(1, 4);
                    number = value.slice(4);
                    break;
    
                case 12: // +CCCPP####### -> CCC (PP) ###-####
                    country = value.slice(0, 3);
                    city = value.slice(3, 5);
                    number = value.slice(5);
                    break;
    
                default:
                    return tel;
            }
    
            if (country == 1) {
                country = "";
            }
    
            number = number.slice(0, 3) + '-' + number.slice(3);
    
            return (country + " (" + city + ") " + number).trim();
        };
    });
    

    Then you can use this filter in your template:

    {{ phoneNumber | tel }}
    <span ng-bind="phoneNumber | tel"></span>
    
    0 讨论(0)
  • 2020-11-30 19:20

    You can use ng-pattern which is more easy and more light. http://tutorialzine.com/2014/12/learn-regular-expressions-in-20-minutes/. Here u can know about it,,,just some meaningful words,,,not needs any directive or filter,,,,

    0 讨论(0)
提交回复
热议问题