maskFormatter
A simple formatter that handles use cases where the value should be formatted according to a mask.
- Code
- Edit
const formattedInput = useFormattedInput(
maskFormatter({
mask: "####-##-##",
allowedChars: /[0-9]/,
})
)
liveUpdate:
allowOverflow:
mask:
maskChar:
"20201231"
Controlled value
value
Type:
string
Default:''
Value of the input.
onChange
Type:
(value: string, formattedValue: string) => void
Default:undefined
The onChange
callback is called when the value changes. It receives both the formattedValue
and the value
.
liveUpdate
Type:
boolean
Default:false
When false
(default value), the onChange
callback is only called on blur for improved performance.
If yo need the onChange
callback to be called each time the user types a character, pass true
.
Mask
mask
Type:
string | ((value: string) => string)
Default:''
The mask the input should be formatted to. Use the maskChar
character (default '#'
) to define what the user will
type, the rest is formatting. (eg. an ISO date would be ####-##-##, a credit card number #### #### #### ####).
you can also pass a function instead of a string if the mask depends on the value. For instance, a credit card number format depends on the first few digits.
maskChar
Type:
string
Default:'#'
Defines which character is used for masking. If you want to use the default '#'
in your formatting, you would need to
defined another character for maskChar
:
maskFormatter({
mask: "___#___",
maskChar: '_'
})
allowedChars
Type:
RegExp
Default:/[a-z0-9]/i
Defines which characters are allowed to be typed, by default all letters and numbers.
- Letters only:
/[a-z]/i
- Lowercase only:
/[a-z]/
- Uppercase only:
/[A-Z]/
- Numbers only:
/[0-9]/
allowOverflow
Type:
boolean
Default:false
If you want the user to be able to continue typing after reaching the end of the mask, pass true
, otherwise it will not be able to add more characters at the end of the mask.