@danil321654/react-input-mask

中文文档
3.0.8发布于 2025/05/23MITCommonJS近 30 天下载 3598

装入输入组件进行反射

中文使用文档
文档目录9 节
  1. mask 数字 : string
  2. maskChar 数字 : string
  3. formatChars 数字 : object
  4. alwaysShowMask 数字 : boolean
  5. inputRef 数字 : function
  6. 实验: 火:
  7. beforeMaskedValueChange 数字 : function
  8. children 数字 : function
  9. 自动填充

反应-输入-任务

Build Status npm version npm downloads

React 的输入遮盖组件 。 注意了UX系统 与IE8+兼容.

演示

目录

安装

npm install react-input-mask --save

也可以不用模块捆绑器

<!-- Load React first -->
<script src="https://unpkg.com/react/dist/react.min.js"></script>
<script src="https://unpkg.com/react-dom/dist/react-dom.min.js"></script>
<!-- Will be exported to window.ReactInputMask -->
<script src="https://unpkg.com/react-input-mask/dist/react-input-mask.min.js"></script>

属性

mask 数字 : string

口罩绳. 默认格式字符为:
9数字 : 0-9
a数字 : A-Z, a-z
*数字 : A-Z, a-z, 0-9

任何角色都可以用回击来逃脱. 在联署材料中,这将成为双重反弹。 例如,一个带有不可移动前缀+49的德国电话口罩将看起来像 mask="+4\9 99 999 99" 或者说 mask={'+4\\9 99 999 99'}

maskChar 数字 : string

覆盖口罩未填充部分的字符 。 默认字符为" ". 如果设置为无效或空字符串,未填充的部分将像普通输入一样为空.

formatChars 数字 : object

定义以字符为键的格式字符,以对应的RegExp字符串为值. 默认 :

{
  '9': '[0-9]',
  'a': '[A-Za-z]',
  '*': '[A-Za-z0-9]'
}

alwaysShowMask 数字 : boolean

当输入为空且没有焦点时显示掩码 .

inputRef 数字 : function

使用 inputRef 改为 ref 如果您需要输入节点来管理焦点、选择等.

实验: 火:

以下道具被认为是实验性的,因为它们更容易出问题并有可能在未来被改变. 谨慎使用.

beforeMaskedValueChange 数字 : function

如果你需要实施更复杂的伪装行为,你可以提供 beforeMaskedValueChange 函数可以更改被遮蔽的值和光标位置,然后应用到输入中. beforeMaskedValueChange 接收以下参数:

  1. 新状态 (对象):新输入状态. 包含 value 财务报告和审定财务报表 selection 字段. selection 对输入模糊或当在输入上架前调用函数时无效。 示例 { value: '12/1_/____', selection: { start: 4, end: 4 } }
  2. 旧状态 (对象):变化前输入状态. 包含 value 财务报告和审定财务报表 selection 字段. selection 对于输入焦点或当在输入上架前调用函数时,则无效.
  3. 用户输入 (字符串):原始输入或粘接字符串. null 如果用户没有输入任何东西(例如由于道具更改而被删除或重新收发所触发).
  4. 遮罩选项 (对象):口罩选项. 示例
{
  mask: '99/99/9999',
  maskChar: '_',
  alwaysShowMask: false,
  formatChars: {
    '9': '[0-9]',
    'a': '[A-Za-z]',
    '*': '[A-Za-z0-9]'
  },
  permanents: [2, 5] // permanents is an array of indexes of the non-editable characters in the mask
}

beforeMaskedValueChange 对象必须返回以下字段:

  1. 价值 (字符串):新值.
  2. 选择 (对象):新选择. 若为 selection 内 newState 论据无效,也必须无效.

请注意: beforeMaskedValueChange 执行次数多于 onChange 并必须是纯洁的.

children 数字 : function

注:为使这一特点更加可靠,请说明贵国在下列情况下的使用情况: 这个问题

使用另一个组件而不是常规 <input /> 传票作为孩子的功能。 函数收到 props 包含不为反应-输入-掩体内部使用道具的参数。 也就是说,除了以下的道具以外,每一道道具都通过: onChange, (中文(简体) ), onPaste, (中文(简体) ), onMouseDown, (中文(简体) ), onFocus, (中文(简体) ), onBlur, (中文(简体) ), value, (中文(简体) ), disabled, (中文(简体) ), readOnly。这些属性如果使用的话,应该总是直接传递给反应-输入-掩码而不是孩子,不应该改变chldren的功能.

import React from 'react';
import InputMask from 'react-input-mask';
import MaterialInput from '@material-ui/core/Input';

// Will work fine
const Input = (props) => (
  <InputMask mask="99/99/9999" value={props.value} onChange={props.onChange}>
    {(inputProps) => <MaterialInput {...inputProps} type="tel" disableUnderline />}
  </InputMask>
);

// Will throw an error because InputMask's and children's onChange aren't the same
const InvalidInput = (props) => (
  <InputMask mask="99/99/9999" value={props.value}>
    {(inputProps) => <MaterialInput {...inputProps} type="tel" disableUnderline onChange={props.onChange} />}
  </InputMask>
);

实例

import React from 'react';
import InputMask from 'react-input-mask';

class PhoneInput extends React.Component {
  render() {
    return <InputMask {...this.props} mask="+4\9 99 999 99" maskChar=" " />;
  }
}

ZIP码的口罩. 在MaskedValue Change之前, 如果用户没有输入则省略后缀:

import React from 'react';
import InputMask from 'react-input-mask';

class Input extends React.Component {
  state = {
    value: ''
  }

  onChange = (event) => {
    this.setState({
      value: event.target.value
    });
  }

  beforeMaskedValueChange = (newState, oldState, userInput) => {
    var { value } = newState;
    var selection = newState.selection;
    var cursorPosition = selection ? selection.start : null;

    // keep minus if entered by user
    if (value.endsWith('-') && userInput !== '-' && !this.state.value.endsWith('-')) {
      if (cursorPosition === value.length) {
        cursorPosition--;
        selection = { start: cursorPosition, end: cursorPosition };
      }
      value = value.slice(0, -1);
    }

    return {
      value,
      selection
    };
  }

  render() {
    return <InputMask mask="99999-9999" maskChar={null} value={this.state.value} onChange={this.onChange} beforeMaskedValueChange={this.beforeMaskedValueChange} />;
  }
}

已知问题

自动填充

浏览器的自动填充需要输入中的空值或完全匹配自动填充值开头的值。 一,即自动填充值"+1(555)123-4567"将与"+1"或"+1"(5)相通,但不会与"+1(-)---"或"1(555)"相通. 有几种可能的解决办法:

  1. 设定 maskChar 将“+1”后空格改为空格 beforeMaskedValueChange 如果没有再输入数字.
  2. 仅在值不为空时应用掩码 。 一般来说,这是最可靠的解决方案,因为我们无法确定自动填充值的格式.
  3. 在口罩中使用较少格式化.

请注意,这可能导致用户体验更差(如果输入为空,我是否应该输入+1?). 你应该选择对用户更为重要的内容——平滑打字体验或自动填充. 电话和ZIP代码输入极有可能被自动填充,而关心这个问题是一个好主意,而两个要素授权中的安全确认代码则根本不应该考虑自动填充.

谢谢

感谢 浏览器Stack 帮助在真实设备上进行测试

版本与发布记录

@danil321654/react-input-mask 共发布 4 个版本,首次发布于 2025/05/03;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.0.8latest2025/05/231.5 年前
3.0.72025/05/231.5 年前
3.0.62025/05/031.5 年前
3.0.22025/05/031.5 年前

关于 @danil321654/react-input-mask 的常见问题

@danil321654/react-input-mask 是什么?

装入输入组件进行反射

如何安装 @danil321654/react-input-mask?

在项目目录运行 npm install @danil321654/react-input-mask,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=0.14.0)、react-dom(>=0.14.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@danil321654/react-input-mask 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/danil321654__react-input-mask 是否存在。

@danil321654/react-input-mask 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@danil321654/react-input-mask 可以商用吗?

@danil321654/react-input-mask 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@danil321654/react-input-mask 的下载量有多少?

根据 npm 官方下载统计,@danil321654/react-input-mask 在 2026/10/12 – 2026/11/10 这 30 天内被下载 3,598 次,日均约 120 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@danil321654/react-input-mask 还在维护吗?

最新版本 3.0.8 发布于 2025/05/23(1.5 年前);至今共发布 4 个版本,其中过去 12 个月发布了 0 个;首次发布于 2025/05/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。