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-timer = { version = "3.0.2", optional = true }
|
||||||
futures-channel = { version = "0.3.13", optional = true }
|
futures-channel = { version = "0.3.13", optional = true }
|
||||||
serde_cbor = { version = "0.11.1", optional = true }
|
serde_cbor = { version = "0.11.1", optional = true }
|
||||||
|
fast_chemail = "0.9.6"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tokio = { version = "1.4.0", features = ["macros", "rt-multi-thread", "sync", "time"] }
|
tokio = { version = "1.4.0", features = ["macros", "rt-multi-thread", "sync", "time"] }
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
use crate::{InputType, InputValueError};
|
use crate::{InputType, InputValueError};
|
||||||
use once_cell::sync::Lazy;
|
use fast_chemail::is_valid_email;
|
||||||
use regex::Regex;
|
|
||||||
|
|
||||||
static EMAIL_RE: Lazy<Regex> = Lazy::new(|| {
|
|
||||||
Regex::new("^(([0-9A-Za-z!#$%&'*+-/=?^_`{|}~&&[^@]]+)|(\"([0-9A-Za-z!#$%&'*+-/=?^_`{|}~ \"(),:;<>@\\[\\\\\\]]+)\"))@").unwrap()
|
|
||||||
});
|
|
||||||
|
|
||||||
pub fn email<T: AsRef<str> + InputType>(value: &T) -> Result<(), InputValueError<T>> {
|
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(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
Err("invalid email".into())
|
Err("invalid email".into())
|
||||||
|
@ -20,45 +15,13 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_email() {
|
fn test_email() {
|
||||||
let test_cases = [
|
assert!(email(&"joe@example.com".to_string()).is_ok());
|
||||||
// Invalid emails
|
assert!(email(&"joe.test@example.com".to_string()).is_ok());
|
||||||
("plainaddress", true),
|
assert!(email(&"email@example-one.com".to_string()).is_ok());
|
||||||
// ("#@%^%#$@#$@#.com", true),
|
assert!(email(&"1234567890@example.com".to_string()).is_ok());
|
||||||
("@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),
|
|
||||||
];
|
|
||||||
|
|
||||||
for (s, res) in test_cases {
|
assert!(email(&"plainaddress".to_string()).is_err());
|
||||||
assert_eq!(email(&s.to_string()).is_err(), res);
|
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