japhonex/
japhonex.rs

1use regex::Regex;
2
3pub const REQUIRE_JA_TEL_REGEX: &str = r"(^0([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9]{1})-[0-9]{4}$)|(^[0-9]{3}-[0-9]{4}-[0-9]{4}$)|(^0120-([0-9]-[0-9]{5}|[0-9]{2}-[0-9]{4}|[0-9]{3}-[0-9]{3}|[0-9]{4}-[0-9]{2}|[0-9]{5}-[0-9]|[0-9]{6})$)";
4pub const OPTIONAL_HYPHEN_JA_TEL_REGEX: &str = r"(^0([0-9]-?[0-9]{4}|[0-9]{2}-?[0-9]{3}|[0-9]{3}-?[0-9]{2}|[0-9]{4}-?[0-9]{1})-?[0-9]{4}$)|(^[0-9]{3}-?[0-9]{4}-?[0-9]{4}$)|(^0120-?([0-9]-?[0-9]{5}|[0-9]{2}-?[0-9]{4}|[0-9]{3}-?[0-9]{3}|[0-9]{4}-?[0-9]{2}|[0-9]{5}-?[0-9]|[0-9]{6})$)";
5pub const NO_HYPHEN_JA_TEL_REGEX: &str = r"^[0-9]{10,11}$";
6
7pub enum HyphenCheck {
8    Required,
9    Optional,
10    NoCheck,
11}
12
13pub fn japhonex(hyphen_check: HyphenCheck) -> regex::Regex {
14    let r: regex::Regex;
15    match hyphen_check {
16        HyphenCheck::Required => r = Regex::new(REQUIRE_JA_TEL_REGEX).unwrap(),
17        HyphenCheck::Optional => r = Regex::new(OPTIONAL_HYPHEN_JA_TEL_REGEX).unwrap(),
18        HyphenCheck::NoCheck => r = Regex::new(NO_HYPHEN_JA_TEL_REGEX).unwrap(),
19    }
20
21    return r;
22}
23
24#[cfg(test)]
25mod japhonex {
26    use super::*;
27
28    #[test]
29    fn test_japhonex_optional() {
30        let regex: regex::Regex = japhonex(HyphenCheck::Optional);
31        let result = regex.is_match("000-0000-0000");
32
33        assert_eq!(result, true);
34    }
35
36    #[test]
37    fn test_japhonex_required() {
38        let regex: regex::Regex = japhonex(HyphenCheck::Required);
39        let pass_result = regex.is_match("000-0000-0000");
40        let miss_result = regex.is_match("00000000000");
41
42        assert_eq!(pass_result, true);
43        assert_eq!(miss_result, false);
44    }
45
46    #[test]
47    fn test_japhonex_no_hyphen() {
48        let regex: regex::Regex = japhonex(HyphenCheck::NoCheck);
49        let pass_result_1 = regex.is_match("000-0000-0000");
50        let pass_result_2 = regex.is_match("00000000000");
51        let miss_result = regex.is_match("000000000000000");
52
53        assert_eq!(pass_result_1, false);
54        assert_eq!(pass_result_2, true);
55        assert_eq!(miss_result, false);
56    }
57}