use-mask
Attach real-time input masking to any input element
Source
Docs
Package
Usage
useMask attaches real-time input masking to any <input> element via a ref callback.
It formats user input against a defined pattern and exposes both the masked display value
and the raw unmasked value. If you need a ready-made input component, use MaskInput
which wraps this hook with all standard input props.
Masked value:
Raw value:
isComplete, slotChar, and transform
Use isComplete to check whether all required mask slots are filled — for example, to control
a submit button. The slotChar option accepts a multi-character string to show positional
hints for each slot. The transform option converts each character before validation —
this example uses it to auto-uppercase input so the A token ([A-Z]) accepts lowercase letters:
Raw value:
Dynamic mask
Use the modify option to change the mask based on the current input value.
This example switches between standard and American Express credit card formats:
Raw value:
Try starting with 34 or 37 for Amex format
Custom tokens
Override or extend the built-in token map with the tokens option:
Raw value:
Escaping
Prefix a token character with \ to treat it as a literal.
In this example, A would normally be an uppercase letter token,
but \A makes it a literal character:
Raw value:
Regex array format
For complex masks where built-in tokens are not enough, pass an array of
string literals and RegExp objects. This example creates a time input where
the first digit is restricted to 0-2 and the minute tens digit to 0-5:
Raw value:
Reset
Use the reset function returned by the hook to programmatically clear
the input value:
Masked:
Raw:
Mask pattern syntax
The mask string defines the expected format. Each character is either a token (editable slot) or a literal (fixed character inserted automatically).
Built-in tokens
9– any single digit ([0-9])a– any single letter ([A-Za-z])A– any uppercase letter ([A-Z])*– any alphanumeric character ([A-Za-z0-9])#– digit or sign ([-+0-9])
Optional segments
Append ? after the last required character to mark remaining slots as optional:
Utility functions
The following pure functions are exported alongside the hook:
formatMask(raw, options)– apply a mask to a raw value stringunformatMask(masked, options)– strip all mask literals from a masked valueisMaskComplete(masked, options)– check if all required slots are filledgeneratePattern(mode, options)– generate a regex string for HTMLpatternattribute
Definition
Exported types
The UseMaskOptions and UseMaskReturnValue types are exported from the @mantine/hooks package;
you can import them in your application: