validator — Rust 数据验证库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 validator?

validator 是 Rust 中一种流行的数据验证库,提供简单且富有表现力的方式来检查输入数据的正确性。它基于宏和注解,允许直接在数据结构中描述验证规则。该库支持诸如字符串长度、数字范围、正则表达式、必填字段和自定义验证器等检查。

为什么需要验证?

在任何处理外部数据(用户输入、API 请求、配置文件)的应用程序中,在处理这些数据之前检查其正确性至关重要。验证错误可能导致程序崩溃、安全漏洞或逻辑不正确。validator 允许集中描述规则,自动生成清晰易懂的错误消息,并避免样板代码。

安装

在 Cargo.toml 中添加:

[dependencies]validator = { version = "0.16", features = ["derive"] }serde = { version = "1.0", features = ["derive"] }

它也常与 serde 一起用于数据反序列化。

主要功能

  • 验证属性:#[validate(length(min = 1, max = 100))]、#[validate(range(min = 18, max = 99))]、#[validate(email)]、#[validate(regex = "...")] 等。
  • 自定义验证器:通过属性 #[validate(custom = "my_function")]。
  • 嵌套验证:适用于包含其他结构体的结构体。
  • 错误分组:返回 ValidationErrors,并按字段提供详细信息。

Rust 代码示例

use validator::Validate;use serde::Deserialize;

#[derive(Debug, Deserialize, Validate)]struct User { #[validate(length(min = 2, max = 50))] name: String,

#[validate(email)] email: String,

#[validate(range(min = 18, max = 120))] age: u8,

#[validate(required)] #[validate(length(min = 8))] password: Option<String>,}

fn main() { let user = User { name: "A".to_string(), // 太短 email: "invalid".to_string(), age: 15, password: Some("123".to_string()), };

match user.validate() { Ok(_) => println!("数据有效"), Err(errors) => { for (field, err_list) in errors.field_errors() { println!("字段 '{}' 有错误:", field); for err in err_list { println!(" - {}", err.message.as_ref().unwrap_or(&"未知错误".to_string())); } } } }}

何时使用 validator?

  • 在创建 REST API(例如,使用 Actix-web、Axum、Rocket)时,用于验证传入的 JSON 请求。
  • 在 CLI 应用程序中,用于验证命令行参数。
  • 在处理服务器端表单时。
  • 在任何需要以最少代码进行声明式数据检查的地方。

该库非常适合注重代码安全性和可读性的项目。它受到积极维护,并在 Rust 生态系统中被广泛使用。

推荐