1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use regex::Regex;

lazy_static! {
    static ref PATTERN: Regex = Regex::new(r"^[1|5|7][0-9]{6}\(?[0-9A-Z]\)?$").unwrap();
    static ref REMOVAL_PATTERN: Regex = Regex::new(r"[\(|\)]").unwrap();
}

pub fn validate(number: &str) -> bool {
    let number = REMOVAL_PATTERN.replace_all(number, "");
    let number = number.trim().to_ascii_uppercase();
    if number.len() == 8 && PATTERN.is_match(&number) {
        true
    } else {
        false
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn validate_mo() {
        assert_eq!(validate("1123456(A)"), true);
        assert_eq!(validate("7431243(3)"), true);
        assert_eq!(validate("5631279(0)"), true);
        assert_eq!(validate("2000148(3)"), false);
        assert_eq!(validate("5215299A"), true);
    }
}