#jquery.inputmask
jquery.inputmask is a jquery plugin which create an input mask.
The plugin is based on the maskedinput plugin of Josh Bush (http://digitalbush.com/projects/masked-input-plugin), but has finer control over the 'mask-definitions' and is fully compatible with the ui-datepicker
A definition can have a cardinality and have multiple prevalidators.
Example of some new definitions:
```javascript
'm': { //month
validator: function(chrs, buffer) {
var dayValue = buffer.join('').substr(0, 3);
return $.inputmask.defaults.aliases['dd/mm/yyyy'].regex.month.test(dayValue + chrs);
},
cardinality: 2,
prevalidator: [{ validator: "[01]", cardinality: 1}]
},
'y': { //year
validator: function(chrs, buffer) {
if ($.inputmask.defaults.aliases['dd/mm/yyyy'].regex.year.test(chrs)) {
var dayMonthValue = buffer.join('').substr(0, 6);
if (dayMonthValue != "29/02/")
return true;
else {
var year = parseInt(chrs); //detect leap year
if (year % 4 == 0)
if (year % 100 == 0)
if (year % 400 == 0)
return true;
else return false;
else return true;
else return false;
}
} else return false;
},
cardinality: 4,
prevalidator: [
{ validator: "[12]", cardinality: 1 },
{ validator: "(19|20)", cardinality: 2 },
{ validator: "(19|20)\\d", cardinality: 3 }
]
}
},
insertMode: false
```
These allow for a finer date validation then 99/99/9999 which also allows 33/33/3333 for example.
In the jquery.inputmask.extentions.js you find a full date input validation which takes days, months & leap years into account.
Also extra features like mask-repetitions (greedy and non-gready) and many other additions are included. In the examples you will find more about them.
Usage:
Include the js-files:
```html
```
Define your masks:
```javascript
$(document).ready(function(){
$("#date").inputmask("d/m/y"); //direct mask
$("#phone").inputmask("mask", {"mask": "(999) 999-9999"}); //specifying fn & options
$("#tin").inputmask({"mask": "99-9999999"}); //specifying options only
});
```
## Extra options:
### change the placeholder
```javascript
$(document).ready(function(){
$("#date").inputmask("d/m/y",{ "placeholder": "*" });
});
```
or a multi-char placeholder
```javascript
$(document).ready(function(){
$("#date").inputmask("d/m/y",{ "placeholder": "dd/mm/yyyy" });
});
```
### execute a function when the mask is completed, incomplete or cleared
```javascript
$(document).ready(function(){
$("#date").inputmask("d/m/y",{ "oncomplete": function(){ alert('inputmask complete'); } });
$("#date").inputmask("d/m/y",{ "onincomplete": function(){ alert('inputmask incomplete'); } });
$("#date").inputmask("d/m/y",{ "oncleared": function(){ alert('inputmask cleared'); } });
});
```
### mask repeat function
```javascript
$(document).ready(function(){
$("#number").inputmask({ "mask": "9", "repeat": 10 }); // ~ mask "9999999999"
});
```
### mask non-greedy repeat function
```javascript
$(document).ready(function(){
$("#number").inputmask({ "mask": "9", "repeat": 10, "greedy": false }); // ~ mask "9" or mask "99" or ... mask "9999999999"
});
```
### get the unmaskedvalue
```javascript
$(document).ready(function(){
$("#number").inputmask('unmaskedvalue');
});
```
### set a value and apply mask
this can be done with the traditionnal jquery.val function (all browsers) or javascript value property for browsers which implement lookupGetter or getOwnPropertyDescriptor
```javascript
$(document).ready(function(){
$("#number").val(12345);
var number = document.getElementById("number");
number.value = 12345;
});
```
with the autoUnmaskoption you can change the return of $.fn.val (or value property) to unmaskedvalue or the maskedvalue
```javascript
$(document).ready(function(){
$('#<%= tbDate.ClientID%>').inputmask({ "mask": "d/m/y", 'autoUnmask' : true}); // value: 23/03/1973
alert($('#<%= tbDate.ClientID%>').val()); // shows 23031973 (autoUnmask: true)
var tbDate = document.getElementById("<%= tbDate.ClientID%>");
alert(tbDate.value); // shows 23031973 (autoUnmask: true)
});
```
### add custom definitions
```javascript
$.extend($.inputmask.defaults.definitions, {
'f': {
"validator": "[0-9\(\)\.\+/ ]",
"cardinality": 1,
'prevalidator': null
}
});
```
### set defaults
```javascript
$.extend($.inputmask.defaults, {
'autounmask': true
});
```
### numeric input direction
```javascript
$(document).ready(function(){
$('#test').inputmask('€ 999.999.999,99', { numericInput: true }); // 123456 => € ___.__1.234,56
});
```
### remove the inputmask
```javascript
$(document).ready(function(){
$('#test').inputmask('remove');
});
```
### escape special mask chars
```javascript
$(document).ready(function(){
$("#months").inputmask("m \\months");
});
```
### clearMaskOnLostFocus - remove the empty mask on blur or when not empty removes the optional trailing part
```javascript
$(document).ready(function(){
$("#ssn").inputmask("999-99-9999",{placeholder:" ", clearMaskOnLostFocus: true }); //default
});
```
### Optional Masks
When `clearMaskOnLostFocus: true` is set in the options (default), the mask will always clearout masks marked as optional when not filled in.
For example, given:
```javascript
$('#test').inputmask('999[-AAA]');
```
While the field has focus and is blank, users will see the full mask `___-___`.
When the required part of the mask is filled and the field loses focus, the user will see `123`.
When both the required and optional parts of the mask are filled out and the field loses focus, the user will see `123-abc`.
### oncleared option
```javascript
$(document).ready(function(){
$("#ssn").inputmask("999-99-9999",{placeholder:" ", oncleared: function(){ alert('Set focus somewhere else ;-)');} });
});
```
### aliases option
First you have to create an alias definition (more examples can be found in jquery.inputmask.extentions.js)
```javascript
$.extend($.inputmask.defaults.aliases, {
'date': {
mask: "d/m/y"
},
'dd/mm/yyyy': {
alias: "date"
}
});
```
use:
```javascript
$(document).ready(function(){
$("#date").inputmask("date"); => equals to $("#date").inputmask("d/m/y");
});
```
or use the dd/mm/yyyy alias of the date alias:
```javascript
$(document).ready(function(){
$("#date").inputmask("dd/mm/yyyy"); => equals to $("#date").inputmask("d/m/y");
});
```
### auto upper/lower- casing inputmask
see jquery.inputmask.extentions.js for an example how to define "auto"-casing in a definition (definition A)
casing can be null, "upper" or "lower"
```javascript
$(document).ready(function(){
$("#test").inputmask("999-AAA"); => 123abc ===> 123-ABC
});
```
### getemptymask command
return the default (empty) mask value
```javascript
$(document).ready(function(){
$("#test").inputmask("999-AAA");
alert($("#test").inputmask("getemptymask")); => "___-___"
});
```
### RTL input
Just add the dir="rtl" attribute to the input element
```html
```
-----------------------------------------