【JavaScript脚本宇宙】跨越边界:挖掘JavaScript验证库的无限可能

引领技术潮流:六大顶级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 提供了大量的验证和清理方法,你几乎可以在任何需要对用户输入进行验证的场合使用它,例如:

  • 用户注册信息验证
  • 表单数据验证
  • API 请求参数验证
  • 2. Yup:一个用于构建模式化验证的JavaScript对象模式验证库

官方地址: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提供了许多验证方法,包括但不限于 stringnumberarrayboolean等。每种类型都有一套自己的验证规则。

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 提供 valueserrorstouched 三个对象来分别处理表单数据、错误信息和触摸信息,让你无需再进行繁琐的手动管理。

<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数据验证库都有其独特的功能和使用场景。选择哪一种主要取决于你的需求和项目类型。理解每个库的工作原理和优缺点,可以帮助开发者更高效地进行数据验证操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP身份证真假API在线文档、身份证ocr识别、身份证三要素人像核验

翔云PHP身份证真假API文档&#xff0c;为开发者提供了一个详尽的操作指南和接口说明。通过简洁明了的文档&#xff0c;开发者可以轻松集成身份证验证功能到各类网站或应用程序中&#xff0c;无需从零开始编写复杂的验证逻辑&#xff0c;大大缩短了开发周期&#xff0c;降低了技…

使用画图工具修改图片文字

方法思路&#xff1a; 使用背景色将需要修改的文字覆盖&#xff0c;然后在原来的地方加入修改后的字。 第一步&#xff1a; 选中图片后右键&#xff0c;选择“编辑”&#xff08;默认会使用画图工具打开&#xff09; 第二步&#xff1a; 选取颜色选取器&#xff0c;如下图 使…

cpprestsdk https双向认证小测

概述 因项目需要在系统中引入https双向认证&#xff0c;由于程序使用C/C和cpprestsdk库编写&#xff0c;从网上经过一顿检索折腾&#xff0c;总算测试通过&#xff0c;故而博文记录用以备忘。 系统环境 Ubuntu 22.04.3 LTS libcpprest-dev&#xff08;jammy,now 2.10.18-1bu…

【Text2SQL 论文】DIN-SQL:分解任务 + 自我纠正 + in-context 让 LLM 完成 Text2SQL

论文&#xff1a;DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2304.11015 Code: Few-shot-NL2SQL-with-prompting | GitHub 文章目录 一、论文速读1.1 Schema Linking Module1.2 Classification & Decompo…

【每日刷题】Day52

【每日刷题】Day52 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 2965. 找出缺失和重复的数字 - 力扣&#xff08;LeetCode&#xff09; 2. 350. 两个数组的交集 II …

kaggle竞赛系列基于图像对水稻分类代码案例

目录 依赖环境 代码 导入依赖包 定义数据集路径&#xff1a; 创建训练集、验证集和测试集的文件夹&#xff1a; 代码的作用&#xff1a; 设置新的数据集路径与类别名称 代码的作用&#xff1a; 定义数据预处理和增强变换&#xff1a; 代码的作用&#xff1a; 定义数…

【源码】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源

多语言聊天室系统&#xff0c;可当即时通讯用&#xff0c;系统默认无需注册即可进入群聊天&#xff0c;全开源 【海外聊天室】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源 - 吾爱资源网

每日5题Day13 - LeetCode 61 - 65

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;61. 旋转链表 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;…

STM32学习和实践笔记(32):电容触摸按键实验

1.电容触摸按键原理介绍 触摸按键与传统的机械按键相比&#xff0c;不仅美观而且耐用、寿命长&#xff0c;它颠覆了传统意义上的机械按键控制&#xff0c;只要轻轻触摸&#xff0c;就可以实现按键开关的控制、量化调节甚至方向控制。触摸按键已广泛应用于手机、DVD、洗衣机等消…

宿舍管理系统带文档java项目基于springboot+vue的宿舍管理系统

文章目录 宿舍管理系统一、项目演示二、项目介绍三、八千字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码和8000字论文参考&#xff08;9.9&#xffe5;带走&#xff09; 宿舍管理系统 一、项目演示 宿舍管理系统 二、项目介绍 基于springbootvue的前后端分…

MVC、MVP 和 MVVM 架构总结

MVC、MVP 和 MVVM 是常见的软件架构模式&#xff0c;主要用于组织应用程序的结构&#xff0c;特别是在用户界面和业务逻辑之间进行分离。以下是对它们的详细解释&#xff0c;包括它们的差异、优缺点。 MVC&#xff08;Model-View-Controller&#xff09; 结构 Model&#xf…

C++的继承(十一):私有继承和受保护的继承

但凡用过C的人都知道&#xff1a;私有继承的成员在派生类里均为私有&#xff0c;受保护的继承公有和受保护的成员在派生类里为受保护。另外C不对私有继承和受保护的继承的派生类指针自动转化为基础类。 #include <stdio.h> struct X {int a;X():a(9) {}int sqare() {ret…

5.nginx平滑升级

nginx平滑升级 一、nginx平滑升级1、下载新版本的安装包2、以之前的安装参数来编译新版本软件3、将新版本的nginx拷贝到安装目录4、启动新版本进程5、平缓关闭旧工作进程6、清理旧版本的nginx 一、nginx平滑升级 USR2 启动新版本进程 WINCH 平缓关闭旧工作进程 1、下载新版本…

分层注入的设计模式-上下层文件相互包含解决办法

现象&#xff1a;上下层文件相互包含 写代码时&#xff0c;会不会遇到&#xff0c;业务层内容要在底层硬件程序里写&#xff0c; 例如&#xff1a;一个外部按键&#xff0c;按键中断要触发一个应用层业务。 业务就要写道IO中断里&#xff0c;这个代码就要用到上层一些函数和变…

在长窗口时代,RAG技术是否仍然必要?

自从谷歌推出 Gemini 1.5 Pro&#xff0c;行业内部对于 RAG 的讨论就不绝于耳。 Gemini 1.5 Pro 的性能确实令人瞩目。根据谷歌公布的技术文档&#xff0c;该系统能够稳定处理长达 100 token 的内容&#xff0c;相当于一小时的视频、十一小时的音频、超过三万行的代码或七十万…

【VTKExamples::Utilities】第十七期 ZBuffer

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ZBuffer,并解析接口vtkWindowToImageFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ…

24 _ 分层和合成机制:为什么CSS动画比JavaScript高效?

在上一篇文章中我们分析了CSS和JavaScript是如何影响到DOM树生成的&#xff0c;今天我们继续沿着渲染流水线向下分析&#xff0c;来聊聊DOM树之后所发生的事情。 在前面《05 | 渲染流程&#xff08;上&#xff09;&#xff1a;HTML、CSS和JavaScript文件&#xff0c;是如何变成…

linux下can-utils的使用以及can接口的配置(以ubuntu20.04为例)

linux下can-utils的使用以及can接口的配置&#xff08;以ubuntu20.04为例&#xff09; can-utils是什么 can-utils 是一套用于Linux操作系统的开源工具&#xff0c;专门用来处理与CAN&#xff08;Controller Area Network&#xff09;总线相关的任务。CAN总线广泛应用于汽车和…

C语言文件操作:打开关闭,读写

程序文件 源程序文件&#xff08;后缀为.c&#xff09; 目标文件&#xff08;Windows环境后缀为.obj&#xff09; 可执行文件&#xff08;Windows环境后缀为.exe&#xff09; fputc FILE* pf fopen("test.txt","w");if (pf NULL){printf("%s\n"…

深入理解Qt计算器应用的构建过程

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、数字按钮的信号与槽函数连接 二、运算符按钮的信号与槽函数连接 三、特殊按钮的信号与…