1#![no_std]
7#![forbid(unsafe_code)]
8
9pub fn is_valid_attr_key(attr: &str) -> bool {
10 let attr = attr.split_once('=').map(|(k, _)| k).unwrap_or_else(|| attr);
11 let mut chars = attr.chars();
12 chars
13 .next()
14 .is_some_and(|c| c.is_alphanumeric() || c == '_' || c == ':')
15 && chars.all(|c| c.is_alphanumeric() || c == '_' || c == ':' || c == '-' || c == '.')
16}
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21
22 #[test]
23 fn is_valid() {
24 assert!(is_valid_attr_key("id"));
25 assert!(is_valid_attr_key("data-var"));
26 assert!(!is_valid_attr_key("'data-var"));
27 assert!(is_valid_attr_key(r#"id="foo""#));
28 }
29}