arv-validate
用于JavaScript和TypeScript的超快速、零依赖、原子、响应式表单验证和数据清理引擎。
arv-validate 是 100% framework-agnostic. 它可以在Vanilla JS、Vue 3、React、Angular、Svelte、Node.js、Bun、浏览器或Web Workers中运行。
安装
npm install arv-validate
快速入门
import { createValidator, required, email, minLength, trim } from 'arv-validate'
const validator = createValidator(
{
name: '',
email: ''
},
{
name: [required(), minLength(3), trim()],
email: [required(), email(), trim()]
}
)
// 1. Live mutations automatically revalidate in real-time
validator.values.name = 'John Doe'
validator.values.email = '[email protected]'
// 2. Validate all fields (e.g. before submitting)
const isValid = await validator.validate()
// 3. Inspect errors
console.log(validator.state.errors)
// 4. Get sanitized, typed payload ready for API request
const payload = validator.getPayload()
console.log(payload) // { name: "John Doe", email: "[email protected]" }
关键特性
- ⚡ 实时验证深度递归ES6代理立即跟踪突变并仅重新计算受影响的字段。
- 🌐 内置的i18n:默认为英语,内置西班牙语(
setLocale('es')),以及自定义字典支持configureMessages(). - 🔌 100%框架不可知零DOM依赖。在JavaScript或TypeScript的任何地方使用。
- 🧩 40+内置规则:
required,email,minLength,maxLength,between,date,afterDate,sameAs,when,custom等等。 - 🔄 异步验证和竞争条件安全:处理内置过时令牌无效的承诺(例如用户名可用性检查)。
- 🧹 变压器及卫生处理:
trim(),toLowerCase(),toFloat(),round(),digitsOnly(),toDate()无需改变UI输入值。 - 🌳 嵌套对象和数组:完全支持点表示法(
'user.address.zipCode')和动态数组(each())。 - 📦 零依赖关系:纯现代JavaScript (~ 6kb gzip)。
国际化(i18n)
在语言之间切换或提供自定义消息:
import { setLocale, configureMessages } from 'arv-validate'
// Switch to Spanish
setLocale('es')
// Switch back to English (default)
setLocale('en')
// Override individual messages globally
configureMessages({
required: 'Field is required',
email: 'Must be a valid email address'
})
可用的适配器
| 框架 | 包 | 安装 |
|---|---|---|
| Vanilla JS / Node.js | arv-validate | npm i arv-validate |
| Vue 3 | arv-validate-vue | npm i arv-validate-vue |
| 反应 | @arv-validate/react | (很快) |
| 角 | @arv-validate/angular | (很快) |
API参考
createValidator(initialData, schema, options) 返回:
v.values响应式实时编辑代理(支持嵌套点表示法)。v.state:平面状态快照{ values, errors, touched, validating, isValid, isDirty }.v.validate():将所有字段标记为触摸,执行同步和异步规则,返回Promise<boolean>.v.validateField(field):立即验证单个字段。v.touch(field):表示该字段已触碰(@blur)。v.untouch(field):不标记触碰过的字段。v.hasError(field):返回true如果字段被触摸并且有一个错误。v.getError(field):返回错误消息或null.v.isValidating(field?):返回true如果异步规则正在运行。v.getPayload(customFn?):为API调用返回经过处理和转换的对象。v.reset(newValues?):重置状态以清除初始值或使用新数据更新。v.setValues(patch):同时更新多个字段。v.subscribe(callback):注册状态更改监听器,返回退订函数。
文档
- 📖 综合文件(英文)
- 📗 Documentación complete en Español
- 📋 规则与变形金刚目录(英文)
- 📋 Catálogo de Reglas y Transformadores (Español)
许可证
麻省理工学院© jccallo