当前位置:首页 > 技术 > 正文内容

前端表单验证提速:validator.js 深度实战

访客 技术 2026年9月29日 11

为什么选 validator.js?

validator.js 把常用校验逻辑拆成独立函数,每个函数只有几 KB,零依赖、按需加载,天然适合现代打包工具。社区持续维护,边界用例(如国际化域名、IPv6)都已覆盖,省去手写正则的麻烦。

三步集成

  1. 安装
    npm i validator
    或浏览器端直接引入 CDN:
    <script src="https://unpkg.com/validator@latest/validator.min.js"></script>
  2. 按需引入
    import isEmail from 'validator/lib/isEmail';
    import isURL    from 'validator/lib/isURL';
    import isIP     from 'validator/lib/isIP';
  3. 一行调用
    console.log(isEmail('张三@公司.中国')); // true
    console.log(isURL('//localhost:3000', { require_protocol: false })); // true
    console.log(isIP('2001:db8::1')); // true

性能优化 5 招

1. 精准导入

只引入用到的函数,Webpack/Rollup 会自动摇树,减少 40 KB+ 体积。

// ✅ 推荐
import isMobilePhone from 'validator/lib/isMobilePhone';

// ❌ 不推荐
import validator from 'validator';

2. 防抖校验

输入框实时校验时,用防抖避免高频计算:

import { debounce } from 'lodash-es';
import isEmail from 'validator/lib/isEmail';

const handleInput = debounce((val) => {
  const ok = isEmail(val);
  setError(ok ? '' : '邮箱格式错误');
}, 300);

input.addEventListener('input', e => handleInput(e.target.value));

3. 前后端共用规则

把校验函数抽成共享包,Node 与浏览器复用,避免规则漂移:

// shared/validators.js
export const rules = {
  email: (v) => isEmail(v),
  phone: (v) => isMobilePhone(v, 'zh-CN')
};

4. 组合校验

链式组合多个函数,满足复杂场景:

import isLength from 'validator/lib/isLength';
import isAlphanumeric from 'validator/lib/isAlphanumeric';

const validUser = (name) =>
  isLength(name, { min: 3, max: 20 }) && isAlphanumeric(name);

5. TypeScript 加持

官方自带 .d.ts,编译期即可发现类型错误:

function checkEmail(input: string): boolean {
  return isEmail(input); // 若传 number 会报错
}

高频场景示例

邮箱白名单

const allowList = ['company.com', 'group.cn'];
isEmail('user@company.com', { host_whitelist: allowList }); // true

URL 协议可选

isURL('example.com', { require_protocol: false }); // true

身份证地区化

import isIdentityCard from 'validator/lib/isIdentityCard';

isIdentityCard('110101199001011234', 'zh-CN'); // 大陆身份证
isIdentityCard('A123456789', 'any');          // 通用格式

测试与贡献

仓库自带 Jest 用例,新增校验逻辑只需在 src 写函数,test 目录补测试,提 PR 即可。

标签: validator.js

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。