Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

eduardoborges/use-mask-input

Open more actions menu

Repository files navigation

馃ジ use-mask-input

Input masks for React. Works with React Hook Form, TanStack Form, Ant Design, and plain inputs.

npm npm downloads bundle size codecov

ko-fi


DocumentationAPI ReferenceTanStack FormSponsor

Install

npm install use-mask-input

Usage

import { useMaskInput } from 'use-mask-input';

function PhoneInput() {
  const ref = useMaskInput({ mask: '(99) 99999-9999' });
  return <input ref={ref} />;
}

With React Hook Form

import { useForm } from 'react-hook-form';
import { useHookFormMask } from 'use-mask-input';

function MyForm() {
  const { register, handleSubmit } = useForm();
  const registerWithMask = useHookFormMask(register);

  return (
    <form onSubmit={handleSubmit(console.log)}>
      <input {...registerWithMask('phone', '(99) 99999-9999')} />
      <input {...registerWithMask('email', 'email')} />
      <button type="submit">Submit</button>
    </form>
  );
}

With TanStack Form

import { useForm } from '@tanstack/react-form';
import { useTanStackFormMask } from 'use-mask-input';

function MyForm() {
  const maskField = useTanStackFormMask();
  const form = useForm({
    defaultValues: {
      phone: '',
    },
    onSubmit: async ({ value }) => {
      console.log(value);
    },
  });

  return (
    <form
      onSubmit={(event) => {
        event.preventDefault();
        event.stopPropagation();
        void form.handleSubmit();
      }}
    >
      <form.Field name="phone">
        {(field) => {
          const inputProps = maskField(
            '(99) 99999-9999',
            {
              name: field.name,
              value: field.state.value,
              onBlur: field.handleBlur,
              onChange: (event) => field.handleChange(event.target.value),
            },
          );

          return <input {...inputProps} placeholder="(00) 00000-0000" />;
        }}
      </form.Field>
    </form>
  );
}

With Ant Design

import { Input } from 'antd';
import { useMaskInputAntd } from 'use-mask-input/antd';

function EmailInput() {
  const ref = useMaskInputAntd({ mask: 'email' });
  return <Input ref={ref} />;
}

APIs

API Description
useMaskInput Hook. Returns a ref callback. Default choice.
useHookFormMask Hook. Wraps React Hook Form's register.
useTanStackFormMask Hook. Adds mask to TanStack Form field input props.
withMask Function. Ref callback. Requires React.memo.
withHookFormMask Function. Mask for registered fields. Requires React.memo.
withTanStackFormMask Function. Mask for TanStack input props. Requires React.memo.
useMaskInputAntd Hook. useMaskInput for Ant Design.
useHookFormMaskAntd Hook. useHookFormMask for Ant Design.
formatWithMask Function. Formats a raw value using a mask, without a mounted element.
unformatWithMask Function. Removes the mask from a formatted value, without a mounted element.

Built-in Aliases

cpfcnpjbr-bank-accountbr-bank-agencycurrencybrl-currencydatetimeemailnumericdecimalintegerpercentageurlipmacssn

Works With

  • TanStack Form (useTanStackFormMask, withTanStackFormMask). See the TanStack Form guide.
  • React Hook Form
  • Ant Design (use-mask-input/antd)
  • React Final Form
  • Next.js / SSR

License

MIT

About

馃ジ A React Hook for building elegant input masks. Compatible with React Hook Form.

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.