A simple, lightweight library for creating inputs with masked values. The the-mask-input
library offers a familiar
<input />
experience but with automatic masking for common input formats.
Small bundle: Just 3.9kB Minified + Gzipped - Bundlephobia
Install via npm, yarn, or pnpm:
npm install the-mask-input
yarn add the-mask-input
pnpm add the-mask-input
Quick examples are available in the repo.
The library includes default masks for Brazilian documents like CPF/CNPJ, UUIDs, and more.
import { Input } from "the-mask-input";
export default function App() {
return (
<form>
<Input name="cpf" placeholder="CPF" mask="cpf"/>
</form>
);
}
The following masks are available out-of-the-box in <Input />
:
- cpf: 000.000.000-00
- cnpj: 00.000.000/0000-00
- cpfCnpj: Either CPF or CNPJ
- cep: 000000-000
- cellphone: (00) 90000-0000
- telephone: (00) 0000-0000
- cellTelephone: Supports both telephone and cellphone formats
- int: Accepts only integers
- color: #000 or #000000
- creditCard: 0000 0000 0000 0000 0000
- date: dd/MM/yyyy (Brazilian format by default)
- isoDate: yyyy/MM/dd
- time: 00:00 (24-hour format)
- uuid: Universally unique identifier format
For currency or percentage formats, simply use "currency"
or "percent"
as the mask.
This mask format allows you to use locale
and currency
to customize the way to format currency values
The formatter extracts monetary parts using
the Intl.NumberFormat.
And you have all possible values for locale
and currency
.
The percent mask follow the same rules of currency, but only accept locale
.
To create custom masks, use RegExp patterns or custom tokens. Here’s how:
The following tokens are available for defining mask patterns:
- d: digits (0-9)
- H: hexadecimals (0-9, a-f)
- X: alphanumeric (A-Z, upper/lower case)
- x: alphabetical (A-Z, upper/lower case)
- A: uppercase alphabet (A-Z)
- a: lowercase alphabet (a-z)
Example:
<Input mask="ddd.ddd.ddd-dd"/>
Use an array of strings or regular expressions to define a custom format.
Example: Brazilian license plate format (ABC-1234):
<Input mask={[/[A-Z]/, /[A-Z]/, /[A-Z]/, "-", /\d/, /\d/, /\d/, /\d/]}/>
For complex scenarios, use a function that returns an array based on specific conditions.
Example: A time input mask for hours (only allowing values up to 23):
const hourMask = (value: string) => {
const startsWithTwo = ["2", /[0-3]/, ":", /[0-5]/, /\d/];
const defaultHour = [/[01]/, /\d/, ":", /[0-5]/, /\d/];
return value.startsWith("2") ? startsWithTwo : defaultHour;
};
<Input mask={hourMask}/>
Contributions are welcome! If you'd like to add a new feature or improve documentation, feel free to open a pull request.
This project is licensed under the MIT License.