Skip to main content

ghpascon_rust/utils/
regex.rs

1use regex::Regex;
2
3pub fn regex_hex(value: &str, len: Option<usize>) -> bool {
4    // only hex characters (0-9, a-f, A-F)
5    let re = Regex::new(r"^[0-9a-fA-F]+$").unwrap();
6
7    // validate pattern
8    if !re.is_match(value) {
9        return false;
10    }
11
12    // validate length if provided
13    if let Some(expected_len) = len {
14        return value.len() == expected_len;
15    }
16
17    return true;
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn test_regex_ok() {
26        assert!(regex_hex("1a2b3c", None));
27        assert!(regex_hex("1A2B3C", None));
28        assert!(regex_hex("1a2b3c", Some(6)));
29    }
30
31    #[test]
32    fn test_non_hex() {
33        assert!(!regex_hex("1a2b3g", None));
34        assert!(!regex_hex("xyz", None));
35        assert!(!regex_hex("12345z", None));
36    }
37
38    #[test]
39    fn test_length() {
40        assert!(regex_hex("1a2b3c", Some(6)));
41        assert!(!regex_hex("1a2b3c", Some(5)));
42        assert!(!regex_hex("1a2b3c", Some(7)));
43    }
44}