wp-lang 0.3.0

WPL language crate with AST, parser, evaluator, builtins, and generators.
Documentation
//! Utilities for Macau Identity Card

use regex::Regex;
use std::sync::LazyLock;

static PATTERN: LazyLock<Regex> =
    LazyLock::new(|| Regex::new(r"^[1|5|7][0-9]{6}\(?[0-9A-Z]\)?$").unwrap());
static REMOVAL_PATTERN: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"[\(|\)]").unwrap());

/// Validates the number.
pub fn validate(number: &str) -> bool {
    let number = REMOVAL_PATTERN
        .replace_all(number, "")
        .trim()
        .to_ascii_uppercase();
    if number.len() == 8 && PATTERN.is_match(&number) {
        true
    } else {
        false
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_validate() {
        assert_eq!(validate("1123456(A)"), true);
        assert_eq!(validate("7431243(3)"), true);
        assert_eq!(validate("5631279(0)"), true);
        assert_eq!(validate("2000148(3)"), false);
        assert_eq!(validate("5215299A"), true);
    }
}