This package provides a mask component - a reworked version of jQuery-Mask-Plugin, without jQuery (and any other dependency either).
yarn add @cmath10/jmaskor
npm i @cmath10/jmaskBasic example
import JMask from '@cmath10/jmask'
// ...
const el = document.querySelector('input#phone')
const mask = new JMask(el, '+7-000-000-00-00')JMask constructor arguments:
el-Element- element which will be managed by the mask component;mask-string- mask to apply;options-object- optional argument, provides following options:clearIfNotMatch-boolean- value from input element will be erased on focus loose, if it wasn't input fully according the specified mask, defaults tofalse;reverse-boolean- iftrue, mask accounting starts with the last characters, which makes it convenient to enter, for example, financial values, defaults tofalse;exclude-string[]- an array of keys that will be excluded from accounting, needed for non-character keys so that they can be used as usual; by default excluded:alt(both, left & right);backspacectrl(both, left & right);home;shift(both, left & right);tab;window(left);- arrows;
descriptors-object- custom mask character definitions.
By default, JMask uses descriptors:
0- for digits [0-9], required, if0present in a mask, will reject any characters until a digit is entered;9- for digits [0-9], optional, if9present in a mask, digit could be skipped;#- for digits [0-9], allows you to enter digits in unlimited quantities;A- alphanumeric, [a-zA-Z0-9] - allows to enter one character from range [a-z] regardless of case or range [0-9];S- alphabetical, [a-zA-Z] - same asAbut without digits.
Any other character (if no translation supplied for) considered as static - when entering reaches it, caret just will
be pushed forward to the next translatable. From the example above these are +, 7, -, so you are able to enter a phone
number like +7-913-815-12-22 by entering only 9138151222
You could supply new translation by adding to the options an object like:
{
'0': { pattern: /\d/ },
'9': { pattern: /\d/, optional: true },
'#': { pattern: /\d/, recursive: true },
'A': { pattern: /[a-zA-Z0-9]/ },
'S': { pattern: /[a-zA-Z]/ },
}Here the key is a character to translate and value is a translation config. Config contains:
pattern-RegExp- pattern to restrict characters (allows entering only matched characters), required;optional-bool- if set, this character will be allowed to skip, defaults tofalse;recursive-bool- allows repeatable input, defaults tofalse;fallback-string- replacement, if entered character doesn't match the pattern and fallback id defined, component will use its value in masked string, defaults toundefined;
- NodeJS >= 18.x
yarn installyarn testyarn sandbox:serve