什么是 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 将是一个绝佳的选择。