【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.pswp.cn/bicheng/20013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20013.shtml
英文地址,請注明出處:http://en.pswp.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′|┛ 嗷~~ 目錄 一、數字按鈕的信號與槽函數連接 二、運算符按鈕的信號與槽函數連接 三、特殊按鈕的信號與…