rust的nutyp验证和validator验证数据的方法示例详解

 更新时间:2024年09月29日 11:10:49   作者:jr-create(•̀⌄•́)  
本文介绍了在Rust语言中,如何使用nuType和validator两种工具来对Cargo.toml和modules.rs文件进行验证,通过具体的代码示例和操作步骤,详细解释了验证过程和相关配置,帮助读者更好地理解和掌握使用这两种验证工具的方法,更多Rust相关技术资讯,可继续关注脚本之家

使用nutype验证

Cargo.toml

nutype = { version = "0.5.0", features = ["serde","regex"] }
regex = "1"
thiserror = "1"

modules.rs

#[nutype(
sanitize(trim, lowercase),
validate(not_empty, len_char_min = 3, len_char_max = 30),
derive(AsRef, Clone, Debug, Serialize, Deserialize, PartialEq)
)]
// AsRef表示可以单独访问username,clone复制
pub struct Username(String);
// #[nutype(
// validate(not_empty, len_char_min = 8),
// derive(AsRef, Clone, Serialize, Deserialize, PartialEq)
// )]
#[nutype(validate(with = password_regex, error = ErrorMessage),derive(Debug, PartialEq),)]
pub struct Password(String);
// 正则匹配手机号
static PHONE_NUMBER_REGEX: LazyLock<Regex> = LazyLock::new(||
Regex::new("^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$"
).unwrap());
// 直接使用正则表达式
#[nutype(validate(regex = PHONE_NUMBER_REGEX))]
pub struct PhoneNumber(String);
// 自定义方法
#[nutype(validate(with = email_regex, error = ErrorMessage))]
pub struct EmailNumber(String);
// 正则匹配邮箱号
static EMAIL_NUMBER_REGEX: LazyLock<Regex> = LazyLock::new(||
Regex::new("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
).unwrap());
pub fn email_regex(name: &str) -> Result<(), ErrorMessage> {
	match EMAIL_NUMBER_REGEX.captures(name){
		// 这里可以返回自定义的错误类型
		None => Err(ErrorMessage::InvalidEmailFormat),
		Some(_) => Ok(())
	}
}

使用validator验证

Cargo.toml

validator = {version = "0.18.1",features = ["derive"]}
lazy_static = "1.5.0"

modules.rs

#[derive(Validate, Debug, Default, Clone, Serialize, Deserialize)]
pub struct RegisterUserDto {
#[validate(length(min = 1, message = "姓名为必填项"))]
pub name: String,
#[validate(length(min = 0, message = "用户名不是必填项"))]
pub username: String,
#[validate(
length(min = 1, message = "电子邮件是必需的"),
email(message = "电子邮件无效")
)]
pub email: String,
#[validate(
length(min = 1, message = "手机号是必需的"),
)]
pub phone: String,
#[validate(
length(min = 6, message = "密码必须至少为 6 个字符")
)]
pub password: String,
#[validate(
length(min = 1, message = "需要确认密码"),
must_match(other = "password", message="密码不匹配")
)]
#[serde(rename = "passwordConfirm")]
pub password_confirm: String,
}
//validator自定义方法是无法使用自定义错误类型的,必须使用crate的,具体看validator crate

到此这篇关于rust的nutyp验证和validator验证数据的方法的文章就介绍到这了,更多相关rust nutyp验证和validator验证数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从零开始使用Rust编写nginx(TLS证书快过期了)

    从零开始使用Rust编写nginx(TLS证书快过期了)

    wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,本文给大家介绍从零开始使用Rust编写nginx(TLS证书快过期了),感兴趣的朋友一起看看吧
    2024-03-03
  • 深入理解 Rust 中的模式匹配语法(最新推荐)

    深入理解 Rust 中的模式匹配语法(最新推荐)

    Rust中的模式匹配提供了多种方式来处理不同的数据类型和场景,本文给大家介绍Rust 中的模式匹配语法,感兴趣的朋友一起看看吧
    2025-03-03
  • C++的替代:微软如何使用rust?

    C++的替代:微软如何使用rust?

    这篇文章主要介绍了微软如何使用rust的,帮助大家了解c++和rust这两门编程语言的联系与区别,感兴趣的朋友可以了解下
    2020-09-09
  • Rust使用Sqlx连接Mysql的实现

    Rust使用Sqlx连接Mysql的实现

    数据库在编程中是一个很重要的环节,本文主要介绍了Rust使用Sqlx连接Mysql的实现,记录rust如何操作数据库并以mysql为主的做简单的使用说明,感兴趣的可以了解一下
    2024-03-03
  • Rust突破编译器限制构造可修改的全局变量

    Rust突破编译器限制构造可修改的全局变量

    这篇文章主要为大家介绍了Rust突破编译器限制构造可修改的全局变量示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Rust之智能指针的用法

    Rust之智能指针的用法

    在Rust中,智能指针是管理内存所有权和生命周期的核心工具,本文主要介绍了Rust之智能指针的用法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • RUST语言函数的定义与调用方法

    RUST语言函数的定义与调用方法

    定义一个RUST函数使用fn关键字,下面通过本文给大家介绍RUST语言函数的定义与调用方法,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 一文学会Rust语言如何操作JSON

    一文学会Rust语言如何操作JSON

    JSON在Web开发中被广泛应用于数据交换,本文主要介绍了Rust语言操作JSON,包括序列化、反序列化、JSON创建等多个方面,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • rust的nutyp验证和validator验证数据的方法示例详解

    rust的nutyp验证和validator验证数据的方法示例详解

    本文介绍了在Rust语言中,如何使用nuType和validator两种工具来对Cargo.toml和modules.rs文件进行验证,通过具体的代码示例和操作步骤,详细解释了验证过程和相关配置,帮助读者更好地理解和掌握使用这两种验证工具的方法,更多Rust相关技术资讯,可继续关注脚本之家
    2024-09-09
  • Rust中字符串类型&str和String的使用

    Rust中字符串类型&str和String的使用

    在Rust中,字符串是一种非常重要的数据类型,&str和String是Rust中两种主要的字符串类型,本文主要介绍了Rust中字符串类型&str和String的使用,感兴趣的可以了解一下
    2024-03-03

最新评论