Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

Phone mask with jQuery and Masked Input Plugin

Writer Emily Wong

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

There are 2 possible formats:

  1. (XX)XXXX-XXXX
  2. (XX)XXXXX-XXXX

Is there any way to mask it accepting both cases?

EDIT:

I tried:

$("#phone").mask("(99) 9999-9999");
$("#telf1").mask("(99) 9999*-9999");
$("#telf1").mask("(99) 9999?-9999"); 

But it doesn't works as I would like.

The closest one was (xx)xxxx-xxxxx.

I would like to get (xx)xxxx-xxxx when I type the 10th number, and (xx)xxxxx-xxxx when I type the 11th. Is it posible?

7

15 Answers

Try this -

$("#phone").mask("(99) 9999?9-9999");
$("#phone").on("blur", 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 ); $(this).val( first + '-' + lastfour ); }
});
7

Here is a jQuery phone number mask. No plugin required. Format can be adjusted to your needs.

Updated JSFiddle.

HTML

<form name="my-form"> <input name="phone-number" type="text" placeholder="(XXX) XXX-XXXX">
</form>

JavaScript

$('#phone-number', '#example-form')
.keydown(function (e) { var key = e.which || e.charCode || e.keyCode || 0; $phone = $(this); // Don't let them remove the starting '(' if ($phone.val().length === 1 && (key === 8 || key === 46)) { $phone.val('('); return false; } // Reset if they highlight and type over first char. else if ($phone.val().charAt(0) !== '(') { $phone.val('('+$phone.val()); } // Auto-format- do not expose the mask as the user begins to type if (key !== 8 && key !== 9) { if ($phone.val().length === 4) { $phone.val($phone.val() + ')'); } if ($phone.val().length === 5) { $phone.val($phone.val() + ' '); } if ($phone.val().length === 9) { $phone.val($phone.val() + '-'); } } // Allow numeric (and tab, backspace, delete) keys only return (key == 8 || key == 9 || key == 46 || (key >= 48 && key <= 57) || (key >= 96 && key <= 105));
})
.bind('focus click', function () { $phone = $(this); if ($phone.val().length === 0) { $phone.val('('); } else { var val = $phone.val(); $phone.val('').val(val); // Ensure cursor remains at the end }
})
.blur(function () { $phone = $(this); if ($phone.val() === '(') { $phone.val(''); }
});
4

Actually the correct answer is on

Zoltan answer will allow user entry "(99) 9999" and then leave the field incomplete

$("#phone").mask("(99) 9999-9999?9");
$("#phone").on("blur", function() { var last = $(this).val().substr( $(this).val().indexOf("-") + 1 ); if( last.length == 5 ) { var move = $(this).val().substr( $(this).val().indexOf("-") + 1, 1 ); var lastfour = last.substr(1,4); var first = $(this).val().substr( 0, 9 ); $(this).val( first + move + '-' + lastfour ); }
});​

You need a jQuery plugin for the mask works as well.

-- HTML --

<input type="text" placeholder="(99) 9999-9999">
<input type="text" placeholder="(99) 9999*-9999">
<input type="text" placeholder="(99) 9999?-9999">

-- JAVASCRIPT --

<script src=""></script>
<script>
$(document).ready(function($){ $("#phone").mask("(99) 9999-9999"); $("#telf1").mask("(99) 9999*-9999"); $("#telf2").mask("(99) 9999?-9999");
});
</script>
3

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=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
1

Using jQuery Mask Plugin there is two possible ways to implement it:

1- Following Anatel's recomendations:

2- Or without following Anatel's recomendations:

All examples above was coded using jQuery Mask Plugin and it can be downloaded at:

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);

With jquery.mask.js

HTML

<input type="text" maxlength="15" value="85999998888">
<input type="text" 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

HTML

<p>85999998888</p>
<p>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;
});

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.

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]; } } }

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); }
}

I was developed simple and easy masks on input field to US phone format jquery-input-mask-phone-number

Simple Add jquery-input-mask-phone-number plugin in to your HTML file and call usPhoneFormat method.

$(document).ready(function () { $('#yourphone').usPhoneFormat({ format: '(xxx) xxx-xxxx', });
});

Working JSFiddle Link

NPM Reference URL

GitHub Reference URL

If you don't want to show your mask as placeholder you should use jQuery Mask Plugin.

The cleanest way:

var options = { onKeyPress: function(phone, e, field, options) { var masks = ['(00) 0000-00000', '(00) 00000-0000']; var mask = (phone.length>14) ? masks[1] : masks[0]; $('.phone-input').mask(mask, options); }
};
$('.phone-input').mask('(00) 0000-00000', options);

Yes use this

$("#phone").inputmask({"mask": "(99) 9999 - 9999"});

Link here

$('.phone').focus(function(e) { // add mask $('.phone') .mask("(99) 99999999?9") .focusin(function(event) { $(this).unmask(); $(this).mask("(99) 99999999?9"); }) .focusout(function(event) { var phone, element; element = $(this); phone = element.val().replace(/\D/g, ''); element.unmask(); if (phone.length > 10) { element.mask("(99) 99999-999?9"); } else { element.mask("(99) 9999-9999?9"); } } );
});

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy