IMask.js 输入掩码神器!表单验证新宠!支持手机号、身份证、银行卡、日期等20+种格式

简介

IMask.js 是一个轻量级、无依赖的 JavaScript 输入掩码库,它可以帮助你为输入字段创建各种格式限制,比如电话号码、日期、货币等。无论用户输入什么,它都会自动格式化为你指定的格式。

主要特性

  • 零依赖 – 纯原生 JavaScript,无需额外库
  • 多种掩码类型 – 支持正则、数字、日期、模式等多种掩码
  • 高度可定制 – 支持自定义定义、可选输入、重复块等
  • 框架友好 – 提供 Vue、React、Angular 等框架插件
  • 移动端优化 – 完美支持移动设备输入
  • 灵活配置 – 支持覆盖模式、占位符、自动修复等

安装

pnpm install imask

基础用法

import IMask from "imask";

// 创建掩码实例
const mask = new IMask(element, {
  mask: "+{1}(000)000-00-00", // 电话号码格式
});

掩码类型详解

1. 正则表达式掩码

使用正则表达式定义输入格式:

const emailMask = new IMask(document.getElementById("email"), {
  mask: /^\S*@?\S*$/, // 邮箱格式验证
});

2. 数字掩码

专门用于数字输入,支持千分位分隔符:

const integerMask = new IMask(document.getElementById("number"), {
  mask: Number, // 整数掩码
  min: -1000,
  max: 1000,
  thousandsSeparator: " ",
});

3. 日期掩码

支持多种日期格式:

// 标准日期格式
const dateMask = new IMask(document.getElementById("date"), {
  mask: Date,
  min: new Date(2000, 0, 1),
  max: new Date(2030, 0, 1),
  lazy: false,
});

4. 模式掩码

使用预定义的模式字符:

const phoneMask = new IMask(document.getElementById("phone"), {
  mask: "+{1}(000)000-00-00", // 电话号码格式,身份证号:"000000-00000000-0000", 信用卡号:"0000 0000 0000 0000" 等
});

5. 枚举掩码

限制输入为预定义的选项:

const enumMask = new IMask(document.getElementById("enum"), {
  mask: IMask.MaskedEnum,
  enum: ["VIP", "GOLD", "SILVER", "BRONZE"],
  lazy: false,
});

6. 范围掩码

限制输入在指定范围内:

const rangeMask = new IMask(document.getElementById("range"), {
  mask: IMask.MaskedRange,
  from: 1,
  to: 100,
  maxLength: 3,
});

常用高级配置

名称说明
mask掩码规则
lazy是否延迟掩码应用
placeholder占位符
unmask是否保留原始值
definitions自定义掩码字符
autofix自动修正输入
greedy贪婪模式
overwrite覆盖模式

事件处理

const mask = new IMask(document.getElementById("input"), {
  mask: "+{1}(000)000-00-00",
});

// 输入完成事件
mask.on("complete", function () {
  console.log("输入完成:", mask.value);
});

// 输入接受事件
mask.on("accept", function () {
  console.log("输入被接受:", mask.value);
});

值的获取和设置

const mask = new IMask(document.getElementById("input"), {
  mask: "+{1}(000)000-00-00",
});

// 获取掩码后的值
console.log(mask.value); // +1(123)456-78-90
// 获取原始值(去除掩码字符)
console.log(mask.unmaskedValue); // 11234567890
// 设置值
mask.value = "+1(123)456-78-90";
mask.unmaskedValue = "11234567890";

管道处理

使用管道转换和格式化值:

// 创建管道
const phonePipe = IMask.createPipe(
  phoneMask.masked,
  IMask.PIPE_TYPE.UNMASKED,
  IMask.PIPE_TYPE.MASKED
);

// 使用管道
const formattedValue = phonePipe("1234567890"); // +1(234)567-89-0

框架集成

Vue.js 集成

pnpm install imask vue-imask
<template>
  <div class="imask-demo">
    <h2>IMask 输入框演示</h2>
    <div class="input-container">
      <label for="phone-input" class="input-label">电话号码</label>
      <input
        id="phone-input"
        v-imask="maskOptions"
        @accept="onAccept"
        @complete="onComplete"
        class="styled-input"
        placeholder="+1(000)000-00-00"
        type="tel"
      />
      <div class="input-hint">请输入完整的电话号码</div>
    </div>
  </div>
</template>

<script setup>
  import { ref, reactive } from "vue";
  import { IMaskDirective } from "vue-imask";

  // 注册指令
  const vImask = IMaskDirective;
  // 掩码选项
  const maskOptions = reactive({
    mask: "+{1}(000)000-00-00",
  });
  // 事件处理函数
  const onAccept = (value) => {};
  const onComplete = (value) => {};
</script>
IMask.js 输入掩码神器!表单验证新宠!支持手机号、身份证、银行卡、日期等20+种格式

React 集成

pnpm install imask react-imask
import React from "react";
import { IMaskInput } from "react-imask";

function PhoneInput() {
  return (
    <IMaskInput
      mask="+{1}(000)000-00-00"
      placeholder="+1(___)___-__-__"
      onAccept={(value) => console.log("接受的值:", value)}
    />
  );
}
IMask.js 输入掩码神器!表单验证新宠!支持手机号、身份证、银行卡、日期等20+种格式

常见问题

Q:如何禁用掩码?

mask.destroy(); // 销毁掩码实例

Q: 如何动态更改掩码?

mask.updateOptions({
  mask: "000-000-0000", // 新的掩码格式
});

Q:如何自定义验证规则?

const customMask = new IMask(document.getElementById("input"), {
  mask: "0000-0000-0000-0000",
  validate: function (value) {
    // 自定义验证逻辑
    return value.length === 19;
  },
});

参考资源

  • 官方文档:https://imask.js.org
  • GitHub:https://github.com/uNmAnNeR/imaskjs
  • API:https://imask.js.org/guide.html

转载作品,原作者:前端开发技术前沿,文章来源:https://mp.weixin.qq.com/s/MjdywGW2ieAmoyBDEJIbmw

(0)
打赏 微信赞赏 微信赞赏 支付宝赞赏 支付宝赞赏
上一篇 2025-07-17 15:33
下一篇 2024-06-03 11:42

相关推荐

发表回复

登录后才能评论
扫码了解
扫码了解
反馈建议
分享本页
返回顶部