Created on 22 September 2021
icon_unfollowing
Login to follow
jquery-mask

jQuery Mask

Stable version 1.0.10 (Compatible with OutSystems 11)
Uploaded on 12 Jan by 
jquery-mask

jQuery Mask

Details
A plugin to make masks on form fields. Documentation - Learn to use the plugin https://igorescobar.github.io/jQuery-Mask-Plugin/docs.html https://igorescobar.github.io/jQuery-Mask-Plugin/#examples
Read more

Basic Usage

$(document).ready(function(){
  $('.date').mask('00/00/0000');
  $('.time').mask('00:00:00');
  $('.date_time').mask('00/00/0000 00:00:00');
  $('.cep').mask('00000-000');
  $('.phone').mask('0000-0000');
  $('.phone_with_ddd').mask('(00) 0000-0000');
  $('.phone_us').mask('(000) 000-0000');
  $('.mixed').mask('AAA 000-S0S');
  $('.cpf').mask('000.000.000-00', {reverse: true});
  $('.cnpj').mask('00.000.000/0000-00', {reverse: true});
  $('.money').mask('000.000.000.000.000,00', {reverse: true});
  $('.money2').mask("#.##0,00", {reverse: true});
  $('.ip_address').mask('0ZZ.0ZZ.0ZZ.0ZZ', {
    translation: {
      'Z': {
        pattern: /[0-9]/, optional: true
      }
    }
  });
  $('.ip_address').mask('099.099.099.099');
  $('.percent').mask('##0,00%', {reverse: true});
  $('.clear-if-not-match').mask("00/00/0000", {clearIfNotMatch: true});
  $('.placeholder').mask("00/00/0000", {placeholder: "__/__/____"});
  $('.fallback').mask("00r00r0000", {
      translation: {
        'r': {
          pattern: /[\/]/,
          fallback: '/'
        },
        placeholder: "__/__/____"
      }
    });
  $('.selectonfocus').mask("00/00/0000", {selectOnFocus: true});
});

Callback examples

var options =  {
  onComplete: function(cep) {
    alert('CEP Completed!:' + cep);
  },
  onKeyPress: function(cep, event, currentField, options){
    console.log('A key was pressed!:', cep, ' event: ', event,
                'currentField: ', currentField, ' options: ', options);
  },
  onChange: function(cep){
    console.log('cep changed! ', cep);
  },
  onInvalid: function(val, e, f, invalid, options){
    var error = invalid[0];
    console.log ("Digit: ", error.v, " is invalid for the position: ", error.p, ". We expect something like: ", error.e);
  }
};

$('.cep_with_callback').mask('00000-000', options);

On-the-fly mask change

var options =  {
  onKeyPress: function(cep, e, field, options) {
    var masks = ['00000-000', '0-00-00-00'];
    var mask = (cep.length>7) ? masks[1] : masks[0];
    $('.crazy_cep').mask(mask, options);
}};

$('.crazy_cep').mask('00000-000', options);

Mask as a function

var SPMaskBehavior = function (val) {
  return val.replace(/\D/g, '').length === 11 ? '(00) 00000-0000' : '(00) 0000-00009';
},
spOptions = {
  onKeyPress: function(val, e, field, options) {
      field.mask(SPMaskBehavior.apply({}, arguments), options);
    }
};

$('.sp_celphones').mask(SPMaskBehavior, spOptions);

Using HTML notation examples

To get your mask applied with the data-mask attribute just use it as the same way you use with the $.mask function.

<input type="text" name="field-name" data-mask="00/00/0000" />

Activating a reversible mask

<input type="text" name="field-name" data-mask="00/00/0000" data-mask-reverse="true" />

Using clearIfNotMatch option

<input type="text" name="field-name" data-mask="00/00/0000" data-mask-clearifnotmatch="true" />

Using selectOnFocus option

<input type="text" name="field-name" data-mask="00/00/0000" data-mask-selectonfocus="true" />

Translation

Teach to jQuery Mask Plugin how to apply your mask:

// now the digit 0 on your mask pattern will be interpreted
// as valid characters like 0,1,2,3,4,5,6,7,8,9 and *
$('.your-field').mask('00/00/0000', {'translation': {0: {pattern: /[0-9*]/}}});

By default, jQuery Mask Plugin only reconizes the logical digit A (Numbers and Letters) and S (A-Za-z) but you can extend or modify this behaviour by telling to jQuery Mask Plugin how to interpret those logical digits.

$('.your-field').mask('AA/SS/YYYY', {'translation': {
    A: {pattern: /[A-Za-z0-9]/},
    S: {pattern: /[A-Za-z]/},
    Y: {pattern: /[0-9]/}
  }
});

Now jQuery Mask Plugin knows the logic digit Y and you can create your own pattern.

Optional digits

You can also tell to jQuery Mask which digit is optional, to create a IP mask for example:

// way 1
$('.ip_address').mask('099.099.099.099');
// way 2
$('.ip_address').mask('0ZZ.0ZZ.0ZZ.0ZZ', {translation:  {'Z': {pattern: /[0-9]/, optional: true}}});

Now, all Z digits in your masks is optional.

Recursive digits

With jQuery Mask Plugin you can also define recursive patterns inside your mask:

$('.money_example').mask('#.##0,00', {reverse: true});

With example above the mask will be placed from the right to the left (that's why reverse:true is defined). As soon as you start typing, a "0,00" will be applied followed by repeating recursively the following pattern "#.##". The result could be something like: 1.234.567,890.

You can also use that kind of feature to define what kind of data could be typed inside of a field:

$('.example').mask('0#');

Now only numbers will be allowed inside your form field.

Fallback digits

When a user types a invalid char for the current position the plugin will replace it by its fallback instead of erasing them.

$('.money_example').mask('#.##0,00', { reverse: true });

Removing the mask

$('.date').unmask();

Getting the unmasked typed value

$('.date').cleanVal();

Getting a masked value programmatically

$('.date').masked('19840807');

Customization

Field options

var custom_options = {
  byPassKeys: [8, 9, 37, 38, 39, 40],
  translation: {
    '0': {pattern: /\d/},
    '9': {pattern: /\d/, optional: true},
    '#': {pattern: /\d/, recursive: true},
    'A': {pattern: /[a-zA-Z0-9]/},
    'S': {pattern: /[a-zA-Z]/}
  };
};

byPassKeys list of keyboard's keyCode that you want to be ignored when it was pressed.
translation object with all digits that should be interpreted as a special chars and its regex representation.

Public methods

/**
Applies the mask to the matching selector elements.

@selector elements to be masked.
@mask should be a string or a function.
@options should be an object.
**/
$(selector).mask(mask [, options]);

/**
Seek and destroy.

@selector elements to be masked.
**/
$(selector).unmask();

/**
Gets the value of the field without the mask.

@selector elements to be masked.
**/
$(selector).cleanVal();

/**
Applies the mask to the matching selector elements.

@selector optional: elements to be masked. The default behaviour it's to lookup for all elements with data-mask attribute.
**/
$.applyDataMask([selector]);

Global options

/**
nonInput: elements we consider nonInput
dataMask: we mask data-mask elements by default
watchInputs: watch for dynamically added inputs by default
watchDataMask: by default we disabled the watcher for dynamically
added data-mask elements by default (performance reasons)
**/

$.jMaskGlobals = {
  maskElements: 'input,td,span,div',
  dataMaskAttr: '*[data-mask]',
  dataMask: true,
  watchInterval: 300,
  watchInputs: true,
  watchDataMask: false,
  byPassKeys: [9, 16, 17, 18, 36, 37, 38, 39, 40, 91],
  translation: {
    '0': {pattern: /\d/},
    '9': {pattern: /\d/, optional: true},
    '#': {pattern: /\d/, recursive: true},
    'A': {pattern: /[a-zA-Z0-9]/},
    'S': {pattern: /[a-zA-Z]/}
  }
};
Release notes (1.0.10)

- Updated dependencies OutsystemsUI

License (1.0.10)

https://igorescobar.github.io/jQuery-Mask-Plugin

Reviews (2)
by 
11 Mar
in version 1.0.10
Excellent component!
Very complete and easy to use.
by 
11 Mar
in version 1.0.10
Perfect for use and very useful
Category
User interface, Input & forms
Support options
This asset is not supported by OutSystems. You may use the discussion forums to leave suggestions or obtain best-effort support from the community, including from  who created this asset.
Dependencies
jQuery Mask has no dependencies.
Application Objects
jQuery Mask has 0 AOs.
Team
Compatible with
Version 11
11.9.2 or higher
11.7.6 to 11.9.0
11.0.539 to 11.0.615
Database:
All
Asset consumers
No consumers yet.
Weekly downloads