rust的nutyp驗(yàn)證和validator驗(yàn)證數(shù)據(jù)的方法示例詳解
使用nutype驗(yàn)證
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表示可以單獨(dú)訪問(wèn)username,clone復(fù)制
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);
// 正則匹配手機(jī)號(hào)
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());
// 直接使用正則表達(dá)式
#[nutype(validate(regex = PHONE_NUMBER_REGEX))]
pub struct PhoneNumber(String);
// 自定義方法
#[nutype(validate(with = email_regex, error = ErrorMessage))]
pub struct EmailNumber(String);
// 正則匹配郵箱號(hào)
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){
// 這里可以返回自定義的錯(cuò)誤類(lèi)型
None => Err(ErrorMessage::InvalidEmailFormat),
Some(_) => Ok(())
}
}使用validator驗(yàn)證
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 = "姓名為必填項(xiàng)"))]
pub name: String,
#[validate(length(min = 0, message = "用戶名不是必填項(xiàng)"))]
pub username: String,
#[validate(
length(min = 1, message = "電子郵件是必需的"),
email(message = "電子郵件無(wú)效")
)]
pub email: String,
#[validate(
length(min = 1, message = "手機(jī)號(hào)是必需的"),
)]
pub phone: String,
#[validate(
length(min = 6, message = "密碼必須至少為 6 個(gè)字符")
)]
pub password: String,
#[validate(
length(min = 1, message = "需要確認(rèn)密碼"),
must_match(other = "password", message="密碼不匹配")
)]
#[serde(rename = "passwordConfirm")]
pub password_confirm: String,
}
//validator自定義方法是無(wú)法使用自定義錯(cuò)誤類(lèi)型的,必須使用crate的,具體看validator crate到此這篇關(guān)于rust的nutyp驗(yàn)證和validator驗(yàn)證數(shù)據(jù)的方法的文章就介紹到這了,更多相關(guān)rust nutyp驗(yàn)證和validator驗(yàn)證數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust?連接?PostgreSQL?數(shù)據(jù)庫(kù)的詳細(xì)過(guò)程
這篇文章主要介紹了Rust?連接?PostgreSQL?數(shù)據(jù)庫(kù)的完整代碼,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
Rust?語(yǔ)言中符號(hào)?::?的使用場(chǎng)景解析
Rust?是一種強(qiáng)調(diào)安全性和速度的系統(tǒng)編程語(yǔ)言,這篇文章主要介紹了Rust?語(yǔ)言中符號(hào)?::?的使用場(chǎng)景,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
rust 如何使用 cargo-nextest 替代 cargo te
cargo-nextest 是新一代的rust測(cè)試程序,能夠極大提升測(cè)試性能,可以完全替代 cargo test 命令,這篇文章主要介紹了rust 如何使用 cargo-nextest 替代 cargo test,需要的朋友可以參考下2024-05-05
rust類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)
Rust是類(lèi)型安全的語(yǔ)言,因此在Rust中做類(lèi)型轉(zhuǎn)換不是一件簡(jiǎn)單的事,本文主要介紹了rust類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
利用Rust實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Ping應(yīng)用
這兩年Rust火的一塌糊涂,甚至都燒到了前端,再不學(xué)習(xí)怕是要落伍了。最近翻了翻文檔,寫(xiě)了個(gè)簡(jiǎn)單的Ping應(yīng)用練練手,感興趣的小伙伴可以了解一下2022-12-12
詳解Rust 生命周期符號(hào)使用的方法和規(guī)律
生命周期是 Rust 中處理引用和所有權(quán)的關(guān)鍵概念,通過(guò)正確使用生命周期符號(hào)和遵循相關(guān)規(guī)律,你可以編寫(xiě)出安全、高效的 Rust 代碼,這篇文章主要介紹了Rust 生命周期符號(hào)使用的方法和規(guī)律,需要的朋友可以參考下2024-03-03

