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}