引领技术潮流:六大顶级JavaScript验证库解析
前言
在现代编程中,数据验证是一个非常重要的环节。本文将探索六种不同的JavaScript数据验证库,分别介绍它们的概述,主要特性,使用示例和使用场景。
欢迎订阅专栏:JavaScript脚本宇宙
文章目录
- 引领技术潮流:六大顶级JavaScript验证库解析
- 前言
- 1. Validator.js:一个用于字符串验证和清理的库
- 1.1 概述
- 1.2 主要特性
- 1.2.1 验证方法
- 1.2.2 清理方法
- 1.3 使用示例
- 1.4 使用场景
- 2. Yup:一个用于构建模式化验证的JavaScript对象模式验证库
- 2.1 概述
- 2.2 主要特性
- 2.2.1 构建模式的方法
- 2.2.2 验证方法
- 2.3 使用示例
- 2.4 使用场景
- 3. Joi:一个强大的,面向对象的 JavaScript 验证库
- 3.1 概述
- 3.2 主要特性
- 3.2.1 面向对象的结构
- 3.2.2 验证方法
- 3.3 使用示例
- 3.4 使用场景
- 4. Express-validator:一个基于 express.js 的中间件,用于验证请求数据
- 4.1 概述
- 4.2 主要特性
- 4.2.1 验证方法
- 4.2.2 中间件使用
- 4.3 使用示例
- 4.4 使用场景
- 5. VeeValidate: 基于模板的表单验证库,专为 Vue.js 设计
- 5.1 概述
- 5.2 主要特性
- 5.2.1 基于模板的验证
- 5.2.2 配合 Vue.js 的使用
- 5.3 使用示例
- 5.4 使用场景
- 6. Formik:React 应用的表单状态管理和验证库
- 6.1 概述
- 6.2 主要特性
- 6.2.1 表单状态管理
- 6.2.2 验证方法
- 6.3 使用示例
- 6.4 使用场景
- 总结
1. Validator.js:一个用于字符串验证和清理的库
1.1 概述
Validator.js 是一个用于字符串验证和清理的 JavaScript 库,它提供了一系列丰富的验证方法和清理(sanitize)方法。
const validator = require('validator');console.log(validator.isEmail('foo@bar.com')); //=> true
1.2 主要特性
该库主要具有以下两个特性:
1.2.1 验证方法
Validator.js 提供了大量的字符串验证方法,如 isEmail()
, isMobilePhone()
, isURL()
等,能够满足各种场景下的验证需求。
const validator = require('validator');console.log(validator.isEmail('foo@bar.com')); //=> true
console.log(validator.isMobilePhone('13100000000', 'zh-CN')); //=> true
console.log(validator.isURL('http://foo.bar')); //=> true
1.2.2 清理方法
除了验证方法,Validator.js 还提供了一些可以将输入字符串清理成特定格式的方法,如 normalizeEmail()
, blacklist()
, whitelist()
等。
const validator = require('validator');console.log(validator.normalizeEmail(' FOO@BAR.COM ')); //=> 'foo@bar.com'
console.log(validator.blacklist('abc@123', '@')); //=> 'abc123'
console.log(validator.whitelist('abc@123', 'abcdefghijklmnopqrstuvwxyz123')); //=> 'abc123'
1.3 使用示例
以下是一个使用 Validator.js 对用户注册信息进行验证的简单示例:
const validator = require('validator');let userData = {email: ' FOO@BAR.COM ',mobile: '13100000000',password: 'password'
};// Normalize email
userData.email = validator.normalizeEmail(userData.email);// Validate email
if (!validator.isEmail(userData.email)) {console.log('Invalid email.');
}// Validate mobile phone number
if (!validator.isMobilePhone(userData.mobile, 'zh-CN')) {console.log('Invalid mobile phone number.');
}// Validate password length
if (!validator.isLength(userData.password, {min:6, max: 12})) {console.log('Password length should be between 6 and 12.');
}
1.4 使用场景
由于 Validator.js 提供了大量的验证和清理方法,你几乎可以在任何需要对用户输入进行验证的场合使用它,例如:
官方地址:Yup Github
2.1 概述
Yup是一个基于Promise的JavaScript对象模式验证库。它允许你构造复杂的、嵌套的对象模式,同时提供强大的错误消息管理。
2.2 主要特性
2.2.1 构建模式的方法
Yup提供了一种链式调用的方式来定义验证模式。例如:
const schema = yup.object().shape({name: yup.string().required(),age: yup.number().positive().integer(),email: yup.string().email(),
});
以上代码定义了一个对象模式,包含name
(必须是字符串)、age
(必须是正整数)和email
(必须是电子邮件格式)三个字段。
2.2.2 验证方法
Yup提供了异步的validate()
方法和同步的validateSync()
方法进行验证。例如:
let person = {name: 'Jim',age: 20,email: 'jim@example.com'
};schema.validate(person).then(function (valid) {console.log(valid);
}).catch(function (err){console.error(err);
});
以上代码会对person
对象根据前面定义的模式进行验证,如果符合模式定义则打印true
,否则抛出错误。
2.3 使用示例
以下是一个完整的使用示例:
const yup = require('yup');let schema = yup.object().shape({name: yup.string().required(),age: yup.number().positive().integer(),email: yup.string().email(),
});let person = {name: 'Jim',age: '20', email: 'jim@example.com',
};schema.isValid(person).then(function(valid) {console.log(valid); // => true
});
2.4 使用场景
Yup适用于任何需要对象模式验证的场景,特别是处理复杂的、嵌套的对象模式时,Yup显得尤为强大和灵活。无论是在Node.js服务器端,还是在各种前端框架(如React/Vue等)中,Yup都可以发挥其强大的验证功能。
3. Joi:一个强大的,面向对象的 JavaScript 验证库
3.1 概述
Joi 是一个值模式描述语言和验证器,它旨在在JavaScript对象的上下文中进行声明式,人类可读的验证。Joi允许你创建蓝图或者模式来验证JavaScript对象(例如表单提交内容或者API请求参数)。如果验证失败,Joi返回一个错误详细说明哪些部分没有通过验证。
3.2 主要特性
3.2.1 面向对象的结构
Joi 的面向对象的结构使其易于使用。每个验证方法都返回一个新的模式,可以被链式调用。
const schema = Joi.object({username: Joi.string().alphanum().min(3).max(30).required(),password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),
});
3.2.2 验证方法
Joi提供了许多验证方法,包括但不限于 string
,number
,array
,boolean
等。每种类型都有一套自己的验证规则。
const schema = Joi.object({name: Joi.string().min(3).required(),age: Joi.number().integer().min(0),likes: Joi.array().items(Joi.string()),
});
3.3 使用示例
以下是一个使用Joi验证一个简单对象的例子:
const Joi = require('joi');const schema = Joi.object({username: Joi.string().alphanum().min(3).max(30).required(),birthyear: Joi.number().integer().min(1900).max(2013),email: Joi.string().email({ minDomainSegments: 2})
});const data = {username: 'abc',birthyear: 1994,email: 'example@example.com'
};const validationResult = schema.validate(data);
if (validationResult.error) {console.log(validationResult.error.details);
} else {console.log('Validation passed!');
}
在这个例子中,我们定义了一个包含username、birthyear和email三个字段的对象的模式,并使用这个模式去验证一个实际的数据对象。如果数据对象满足模式的要求,schema.validate(data)
会返回一个没有错误的结果;否则,它会返回一个包含错误详情的对象。
3.4 使用场景
Joi 最常见的使用场景是验证API请求的参数。例如,当我们设计一个RESTful API时,可以使用Joi来验证请求体中的JSON数据。如果数据不满足我们预定义的模式,我们可以直接返回一个错误响应,告诉客户端哪里出错了。
以上就是对 Joi 这个强大的、面向对象的 JavaScript 验证库的介绍,更多详情和文档请访问其官方网站。
4. Express-validator:一个基于 express.js 的中间件,用于验证请求数据
Express-validator 是一个强大而灵活的表单验证库。 它是基于 express.js 的中间件,可以轻松处理任何类型的服务器端验证。
4.1 概述
Express-validator 可以帮助你验证、清理以及对传入的请求数据进行转换,确保在处理应用程序逻辑之前,你的数据是正确和有效的。
4.2 主要特性
4.2.1 验证方法
Express-validator 提供了一系列的验证方法,从常见的如非空、长度限制,到复杂的正则匹配,几乎可以应对所有的验证需求。
4.2.2 中间件使用
Express-validator 作为 express 的中间件,可以很方便的嵌入到任何 express 应用的路由处理中,提供即时并且方便的验证功能。
4.3 使用示例
要使用 express-validator 进行数据验证,只需要将其添加为您的请求处理流程的一部分即可:
const { check, validationResult } = require('express-validator');app.post('/user', [// username must be an emailcheck('username').isEmail(),// password must be at least 5 chars longcheck('password').isLength({ min: 5 })
], (req, res) => {// Finds the validation errors in this request and wraps them in an object with handy functionsconst errors = validationResult(req);if (!errors.isEmpty()) {return res.status(400).json({ errors: errors.array() });}User.create({username: req.body.username,password: req.body.password}).then(user => res.json(user));
});
4.4 使用场景
无论你是处理简单的用户注册表单,还是更复杂的产品信息录入表单,Express-validator 都能提供强大而又灵活的解决方案。
5. VeeValidate: 基于模板的表单验证库,专为 Vue.js 设计
VeeValidate 是一个基于模板的验证框架,专为 Vue.js 设计。它允许你在 Vue.js 应用程序中使用模板标记进行验证。
5.1 概述
VeeValidate 是一款轻量级插件,其 API 配合 Vue.js 的组件系统非常实用。通过提供一些自定义的规则和验证方法,使开发者们可以方便地进行表单验证。
5.2 主要特性
5.2.1 基于模板的验证
VeeValidate 允许你在模板中添加验证规则,这样可以非常直观地看到每个字段所需的验证规则有哪些。下面是一个基本的示例:
<template><form @submit.prevent="submit"><input v-model="name" v-validate="'required'" name="name" type="text"/><span v-show="errors.has('name')">{{ errors.first('name') }}</span><input v-model="email" v-validate="'required|email'" name="email" type="text"/><span v-show="errors.has('email')">{{ errors.first('email') }}</span><button type="submit">Submit</button></form>
</template>
5.2.2 配合 Vue.js 的使用
作为一个专门为 Vue.js 设计的插件,VeeValidate 所有的配置都能和 Vue.js 完美结合。例如,你可以使用 Vue.js 的 v-model
指令和 v-show
指令来实现表单验证的显示和隐藏。
5.3 使用示例
下面是一个简单的使用示例:
import { ValidationProvider, extend } from 'vee-validate';
import { required, email } from 'vee-validate/dist/rules';// 添加 'required' 和 'email' 规则
extend('required', {...required,message: 'This field is required'
});extend('email', {...email,message: 'This field must be a valid email'
});new Vue({el: '#app',components: {ValidationProvider},data() {return {name: '',email: ''};},methods: {submit() {console.log('Form Submitted!');}}
});
5.4 使用场景
当你需要在 Vue.js 项目中进行表单验证时,VeeValidate 是一个很好的选择。它提供了多种验证规则,并且允许你添加自定义规则,满足不同的需求。
6. Formik:React 应用的表单状态管理和验证库
6.1 概述
Formik 是一款强大的 React 表单库,它可以简化复杂表单状态的管理,并提供了易于使用的验证方法。Formik 的设计理念是通过简化代码结构,尽量减少不必要的渲染并且提高性能。
import React from 'react';
import { Formik, Field, Form, ErrorMessage } from 'formik';
6.2 主要特性
Formik 提供了一整套解决方案,包括表单状态管理、验证方法等。
6.2.1 表单状态管理
Formik 提供 values
、errors
和 touched
三个对象来分别处理表单数据、错误信息和触摸信息,让你无需再进行繁琐的手动管理。
<FormikinitialValues={{ email: '', password: '' }}validate={values => {const errors = {};if (!values.email) {errors.email = 'Required';} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)) {errors.email = 'Invalid email address';}return errors;}}
//...
/>
6.2.2 验证方法
Formik 支持同步和异步两种验证方式,同时也支持使用 Yup 这样的第三方验证库。
<FormikinitialValues={{ email: '', password: '' }}validationSchema={Yup.object({email: Yup.string().email('Invalid email address').required('Required'),})}
//...
/>
6.3 使用示例
以下是一个简单的登录表单示例:
import React from 'react';
import { Formik, Field, Form, ErrorMessage } from 'formik';
import * as Yup from 'yup';export const LoginForm = () => (<div><h1>Login</h1><FormikinitialValues={{ email: '', password: '' }}validationSchema={Yup.object({email: Yup.string().email('Invalid email address').required('Required'),password: Yup.string().required('Required'),})}onSubmit={(values, { setSubmitting }) => {setTimeout(() => {alert(JSON.stringify(values, null, 2));setSubmitting(false);}, 400);}}><Form><label htmlFor="email">Email Address</label><Field name="email" type="email" /><ErrorMessage name="email" component="div" /><label htmlFor="password">Password</label><Field name="password" type="password" /><ErrorMessage name="password" component="div" /><button type="submit">Submit</button></Form></Formik></div>
);
6.4 使用场景
Formik 是处理 React 中的表单状态管理和验证最佳选择。无论你是在构建简单的登录表单,还是需要处理复杂业务逻辑的大型表单,都可以使用 Formik 来简化你的开发流程。
总结
每个JavaScript数据验证库都有其独特的功能和使用场景。选择哪一种主要取决于你的需求和项目类型。理解每个库的工作原理和优缺点,可以帮助开发者更高效地进行数据验证操作。