Phone mask with jQuery and Masked Input Plugin

前端 未结 15 1395
夕颜
夕颜 2020-11-28 06:54

I have a problem masking a phone input with jQuery and Masked Input Plugin.

There are 2 possible formats:

  1. (XX)XXXX-XXXX
  2. (
相关标签:
15条回答
  • 2020-11-28 07:34

    The best way to do this is using the change event like this:

    $("#phone")
    .mask("(99) 9999?9-9999")
    .on("change", function() {
    
        var last = $(this).val().substr( $(this).val().indexOf("-") + 1 );
    
        if( last.length == 3 ) {
            var move = $(this).val().substr( $(this).val().indexOf("-") - 1, 1 );
            var lastfour = move + last;
            var first = $(this).val().substr( 0, 9 ); // Change 9 to 8 if you prefer mask without space: (99)9999?9-9999
    
            $(this).val( first + '-' + lastfour );
        }
    })
    .change(); // Trigger the event change to adjust the mask when the value comes setted. Useful on edit forms.
    
    0 讨论(0)
  • 2020-11-28 07:34

    As alternative

        function FormatPhone(tt,e){
      //console.log(e.which);
      var t = $(tt);
      var v1 = t.val();
      var k = e.which;
      if(k!=8 && v1.length===18){
        e.preventDefault();
      }
      var q = String.fromCharCode((96 <= k && k <= 105)? k-48 : k);
      if (((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) && e.keyCode!=46 && e.keyCode!=37 && e.keyCode!=8 && e.keyCode!=39) {
     e.preventDefault();
      }
      else{
        setTimeout(function(){
          var v = t.val();
          var l = v.length;
          //console.log(l);
          if(k!=8){
            if(l<4){
              t.val('+7 ');
            }
            else if(l===4){
              if(isNaN(q)){
                t.val('+7 (');
              }
              else{
                t.val('+7 ('+q);
              }
            }
            else if(l===7){
              t.val(v+')');
            }
            else if(l===9){
              t.val(v1+' '+q);
            }
            else if(l===13||l===16){
              t.val(v1+'-'+q);
            }
            else if(l>18){
              v=v.substr(0,18);
              t.val(v);
            }
            }
            else{
              if(l<4){
                t.val('+7 ');
              }
            }
        },100);
      }
    }
    
    0 讨论(0)
  • 2020-11-28 07:35

    You can use the phone alias with Inputmask v3

    $('#phone').inputmask({ alias: "phone", "clearIncomplete": true });
    

    $(function() {
      $('input[type="tel"]').inputmask({ alias: "phone", "clearIncomplete": true });
    });
    <label for="phone">Phone</label>
        <input name="phone" type="tel">
    
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.extensions.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.numeric.extensions.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.date.extensions.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.phone.extensions.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/jquery.inputmask.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/phone-codes/phone.js"></script>

    https://github.com/RobinHerbots/Inputmask#aliases

    0 讨论(0)
  • 2020-11-28 07:35

    The best way to do it on blur is:

                            function formatPhone(obj) {
                            if (obj.value != "")
                            { 
                                var numbers = obj.value.replace(/\D/g, ''),
                                char = {0:'(',3:') ',6:' - '};
                                obj.value = '';
                                upto = numbers.length; 
    
                                if(numbers.length < 10) 
                                { 
                                    upto = numbers.length; 
                                }
                                else
                                { 
                                    upto = 10; 
                                }
                                for (var i = 0; i < upto; i++) {
                                    obj.value += (char[i]||'') + numbers[i];
                                }
                            } 
                        }
    
    0 讨论(0)
  • 2020-11-28 07:38
    var $phone = $("#input_id");
    var maskOptions = {onKeyPress: function(phone) {
        var masks = ['(00) 0000-0000', '(00) 00000-0000'];
        mask = phone.match(/^\([0-9]{2}\) 9/g)
            ? masks[1]
            : masks[0];
        $phone.mask(mask, this);
    }};
    $phone.mask('(00) 0000-0000', maskOptions);
    
    0 讨论(0)
  • 2020-11-28 07:38

    With jquery.mask.js

    http://jsfiddle.net/brynner/f9kd0aes/

    HTML

    <input type="text" class="phone" maxlength="15" value="85999998888">
    <input type="text" class="phone" maxlength="15" value="8533334444">
    

    JS

    // Function
    function phoneMask(e){
        var s=e.val();
        var s=s.replace(/[_\W]+/g,'');
        var n=s.length;
        if(n<11){var m='(00) 0000-00000';}else{var m='(00) 00000-00000';}
        $(e).mask(m);
    }
    
    // Type
    $('body').on('keyup','.phone',function(){   
        phoneMask($(this));
    });
    
    // On load
    $('.phone').keyup();
    

    Only jQuery

    http://jsfiddle.net/brynner/6vbrqe6z/

    HTML

    <p class="phone">85999998888</p>
    <p class="phone">8599998888</p>
    

    jQuery

    $('.phone').text(function(i, text) {
        var n = (text.length)-6;
        if(n==4){var p=n;}else{var p=5;}
        var regex = new RegExp('(\\d{2})(\\d{'+p+'})(\\d{4})');
        var text = text.replace(regex, "($1) $2-$3");
        return text;
    });
    
    0 讨论(0)
提交回复
热议问题