Merge pull request #758 from oscartbeaumont/email-validator-pr
replace custom email validation with fast_chemail
This commit is contained in:
commit
22e0e9966e
|
@ -70,6 +70,7 @@ sha2 = { version = "0.9.3", optional = true }
|
|||
futures-timer = { version = "3.0.2", optional = true }
|
||||
futures-channel = { version = "0.3.13", optional = true }
|
||||
serde_cbor = { version = "0.11.1", optional = true }
|
||||
fast_chemail = "0.9.6"
|
||||
|
||||
[dev-dependencies]
|
||||
tokio = { version = "1.4.0", features = ["macros", "rt-multi-thread", "sync", "time"] }
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
use crate::{InputType, InputValueError};
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::Regex;
|
||||
|
||||
static EMAIL_RE: Lazy<Regex> = Lazy::new(|| {
|
||||
Regex::new("^(([0-9A-Za-z!#$%&'*+-/=?^_`{|}~&&[^@]]+)|(\"([0-9A-Za-z!#$%&'*+-/=?^_`{|}~ \"(),:;<>@\\[\\\\\\]]+)\"))@").unwrap()
|
||||
});
|
||||
use fast_chemail::is_valid_email;
|
||||
|
||||
pub fn email<T: AsRef<str> + InputType>(value: &T) -> Result<(), InputValueError<T>> {
|
||||
if EMAIL_RE.is_match(value.as_ref()) {
|
||||
if is_valid_email(value.as_ref()) {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("invalid email".into())
|
||||
|
@ -20,45 +15,13 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn test_email() {
|
||||
let test_cases = [
|
||||
// Invalid emails
|
||||
("plainaddress", true),
|
||||
// ("#@%^%#$@#$@#.com", true),
|
||||
("@example.com", true),
|
||||
("Joe Smith <email@example.com>", true),
|
||||
("email.example.com", true),
|
||||
// ("email@example@example.com", true),
|
||||
// (".email@example.com", true),
|
||||
// ("email.@example.com", true),
|
||||
// ("email..email@example.com", true),
|
||||
("あいうえお@example.com", true),
|
||||
// ("email@example.com (Joe Smith)", true),
|
||||
// ("email@example", true),
|
||||
// ("email@-example.com", true),
|
||||
// ("email@example.web", true),
|
||||
// ("email@111.222.333.44444", true),
|
||||
// ("email@example..com", true),
|
||||
// ("Abc..123@example.com", true),
|
||||
// Valid Emails
|
||||
("email@example.com", false),
|
||||
("firstname.lastname@example.com", false),
|
||||
("email@subdomain.example.com", false),
|
||||
("firstname+lastname@example.com", false),
|
||||
("email@123.123.123.123", false),
|
||||
("email@[123.123.123.123]", false),
|
||||
// This returns parsing error
|
||||
// (r#""email"@example.com"#, false),
|
||||
("1234567890@example.com", false),
|
||||
("email@example-one.com", false),
|
||||
("_______@example.com", false),
|
||||
("email@example.name", false),
|
||||
("email@example.museum", false),
|
||||
("email@example.co.jp", false),
|
||||
("firstname-lastname@example.com", false),
|
||||
];
|
||||
assert!(email(&"joe@example.com".to_string()).is_ok());
|
||||
assert!(email(&"joe.test@example.com".to_string()).is_ok());
|
||||
assert!(email(&"email@example-one.com".to_string()).is_ok());
|
||||
assert!(email(&"1234567890@example.com".to_string()).is_ok());
|
||||
|
||||
for (s, res) in test_cases {
|
||||
assert_eq!(email(&s.to_string()).is_err(), res);
|
||||
}
|
||||
assert!(email(&"plainaddress".to_string()).is_err());
|
||||
assert!(email(&"@example.com".to_string()).is_err());
|
||||
assert!(email(&"email.example.com".to_string()).is_err());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user