use once_cell::sync::OnceCell;
use regex::Regex;
static PATTERN: OnceCell<Regex> = OnceCell::new();
pub fn validate_name(name: &str) -> bool {
PATTERN
.get_or_init(|| Regex::new(r"^[A-Za-z0-9][A-Za-z0-9\-\:\.\/_]*$").unwrap())
.is_match(name)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_valid_names() {
assert!(validate_name("Sensor1"));
assert!(validate_name("sensor-name"));
assert!(validate_name("123Sensor"));
assert!(validate_name("sensor_123"));
assert!(validate_name("sensor.name/1"));
}
#[test]
fn test_invalid_names() {
assert!(!validate_name("")); assert!(!validate_name("-sensor")); assert!(!validate_name(".name")); assert!(!validate_name("sensor name")); assert!(!validate_name("sensor@name")); assert!(!validate_name("センサー")); }
}