validator — Rust 中的数据验证

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

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

开始课程

什么是 validator?

validator 是一个流行的 Rust 语言数据验证库。它提供了灵活且富有表现力的工具,用于检查输入数据的正确性:字符串、数字、电子邮件地址、URL、IP 地址、UUID 等。该库基于宏和 trait,使得组合验证规则和创建自定义检查变得非常容易。

为什么需要数据验证?

在任何处理用户输入、API 或配置文件的应用程序中,在使用数据之前对其进行验证至关重要。验证错误可能导致程序崩溃、出现漏洞或行为异常。validator 库有助于:

  • 保证数据的完整性
  • 减少样板代码的数量
  • 提供统一的错误处理方式
  • 简化测试

安装

将 validator 添加到 Cargo.toml 文件中:

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

在验证之前,也常使用 serde 进行数据反序列化。

主要功能

  • 验证属性 — 用于结构体字段的 #[validate(...)]
  • 内置验证器:length、range、email、url、ip、uuid、contains、regex、custom
  • 嵌套验证 — 对嵌套结构体进行递归检查
  • 自定义验证器 — 通过函数或闭包实现
  • 错误分组 — 将所有验证错误收集到单个 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 = 13, max = 120))] age: u8,

#[validate(url)] website: Option<String>,}

fn main() { let user = User { name: "A".to_string(), email: "invalid-email".to_string(), age: 10, website: Some("not-a-url".to_string()), };

match user.validate() { Ok(_) => println!("数据正确"), Err(errors) => { for (field, errs) in errors.field_errors() { for err in errs { println!("字段 {} 错误: {}", field, err); } } } }}

何时使用 validator?

该库非常适合用于:

  • 基于 Actix、Axum、Rocket 的 Web 服务器
  • 处理表单和 JSON 请求
  • 解析配置文件
  • 需要用户输入的 CLI 应用程序
  • 在写入数据库之前验证数据

如果您需要在 Rust 中快速可靠地检查数据,validator 将是一个绝佳的选择。

推荐