valust_regex_utils/time.rs
1//! Time-related regex expressions.
2
3/// Regex for matching a valid 12-hour time format (HH:MM) with no `am/pm` suffix.
4///
5/// Note this regex allows omitting the leading zeros.
6///
7/// ## Example
8///
9/// ```rust
10/// use regex::Regex;
11/// use valust_regex_utils::time::HH_MM_12H_NO_LEADING_NO_SUFFIX;
12///
13/// let time_regex = Regex::new(HH_MM_12H_NO_LEADING_NO_SUFFIX).unwrap();
14/// assert!(time_regex.is_match("1:00"));
15/// assert!(time_regex.is_match("12:00"));
16/// assert!(!time_regex.is_match("13:00"));
17///
18/// assert!(time_regex.is_match("1:59"));
19/// assert!(!time_regex.is_match("1:60"));
20/// ```
21pub const HH_MM_12H_NO_LEADING_NO_SUFFIX: &str = r"^(0?[1-9]|1[0-2]):[0-5][0-9]$";
22
23/// Regex for matching a valid 12-hour time format (HH:MM) with `am/pm` suffix.
24///
25/// Note this regex allows omitting the leading zeros.
26///
27/// ## Example
28///
29/// ```rust
30/// use regex::Regex;
31/// use valust_regex_utils::time::HH_MM_12H_NO_LEADING;
32///
33/// let time_regex = Regex::new(HH_MM_12H_NO_LEADING).unwrap();
34///
35/// assert!(time_regex.is_match("1:00 am"));
36/// assert!(time_regex.is_match("12:00 pm"));
37/// assert!(!time_regex.is_match("13:00 am"));
38///
39/// assert!(time_regex.is_match("1:59 pm"));
40/// assert!(!time_regex.is_match("1:60 am"));
41/// ```
42pub const HH_MM_12H_NO_LEADING: &str =
43 r"^((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))$";
44
45/// Regex for matching a valid 24-hour time format (HH:MM).
46///
47/// Note this regex does not allow omitting the leading zeros.
48///
49/// ## Example
50///
51/// ```rust
52/// use regex::Regex;
53/// use valust_regex_utils::time::HH_MM_24H;
54///
55/// let time_regex = Regex::new(HH_MM_24H).unwrap();
56///
57/// assert!(time_regex.is_match("00:00"));
58/// assert!(time_regex.is_match("23:59"));
59/// assert!(!time_regex.is_match("24:00"));
60///
61/// assert!(time_regex.is_match("01:59"));
62/// assert!(!time_regex.is_match("1:60"));
63/// ```
64pub const HH_MM_24H: &str = r"^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$";
65
66/// Regex for matching a valid 24-hour time format (HH:MM).
67///
68/// Note this regex allows omitting the leading zeros.
69///
70/// ## Example
71///
72/// ```rust
73/// use regex::Regex;
74/// use valust_regex_utils::time::HH_MM_24H_NO_LEADING;
75///
76/// let time_regex = Regex::new(HH_MM_24H_NO_LEADING).unwrap();
77///
78/// assert!(time_regex.is_match("0:00"));
79/// assert!(time_regex.is_match("23:59"));
80/// assert!(!time_regex.is_match("24:00"));
81///
82/// assert!(time_regex.is_match("1:59"));
83/// assert!(!time_regex.is_match("1:60"));
84/// ```
85pub const HH_MM_24H_NO_LEADING: &str = r"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$";
86
87/// Regex for matching a valid 24-hour time format (HH:MM:SS).
88///
89/// Note this regex does not allow omitting the leading zeros.
90///
91/// ## Example
92///
93/// ```rust
94/// use regex::Regex;
95/// use valust_regex_utils::time::HH_MM_SS;
96///
97/// let time_regex = Regex::new(HH_MM_SS).unwrap();
98///
99/// assert!(time_regex.is_match("00:00:00"));
100/// assert!(time_regex.is_match("23:59:59"));
101/// assert!(!time_regex.is_match("24:00:00"));
102///
103/// assert!(time_regex.is_match("01:59:59"));
104/// assert!(!time_regex.is_match("1:60:00"));
105/// ```
106pub const HH_MM_SS: &str = r"^(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)$";