当前位置: 首页 > article >正文

rust的nutyp验证和validator验证数据的方法

使用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

http://www.kler.cn/news/327305.html

相关文章:

  • MySQL | group by 用法
  • 牛客周赛 Round 62
  • 828华为云征文|部署个人文档管理系统 Docspell
  • Kali Linux安全工具
  • 实战OpenCV之形态学操作
  • 网络带宽对于服务器的影响
  • 云原生之运维监控实践-使用Prometheus与Grafana实现对MySQL和Redis服务的监测
  • Drf认证组件
  • Feign 主要负责简化 HTTP API 的调用逻辑; Eureka 负责服务实例的注册和服务发现; Ribbon 则负责实现客户端的负载均衡。
  • UE4_Niagara基础实例—7、如何让粒子照亮周边环境
  • 制造企业各部门如何参与生产成本控制与管理?
  • Leetcode Hot 100 | 543.二叉树的直径 | 递归+优化
  • 【人人保-注册安全分析报告-无验证方式导致安全隐患】
  • 项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备
  • git使用“保姆级”教程3——添加暂存区及提交本地库
  • 苹果手机如何录屏?IOS 自带工具与嗨格式录屏大师 APP 详解
  • 只写CURD后台管理的Java后端要如何提升自己
  • RabbitMQ的应用问题
  • ansible学习之 Facts
  • Python知识点:如何使用EdgeX Foundry与Python进行边缘计算
  • 使用iTextPDF库时,设置文字为中文格式
  • 基于微信小程序的美食推荐系统
  • 鸿蒙NEXT入门到实战(基于最新api12稳定版)
  • DevExpress WinForms中文教程:Data Grid - 如何添加或删除行?
  • 基于springboot的评分评教管理系统
  • C#进阶-读写Excel常用框架及其使用方式
  • Edge SCDN:安全与速度并进的解决方案
  • C嘎嘎入门篇:类和对象(2)
  • JVM运行情况预估
  • 分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题