# -*- coding: utf-8 -*-
"""Cron 表达式校验工具。

支持标准 5 字段 cron 语法（分 时 日 月 周），
每个字段仅允许 `*` 或对应范围内的数值。
"""

import re

CRON_FIELD_PATTERNS = [
    r'(\*|[0-5]?\d)',           # minute: 0-59
    r'(\*|[01]?\d|2[0-3])',     # hour: 0-23
    r'(\*|[1-9]|[12]\d|3[01])', # day of month: 1-31
    r'(\*|[1-9]|1[0-2])',       # month: 1-12
    r'(\*|[0-6])',              # day of week: 0-6
]


def validate_cron_expression(expr: str) -> bool:
    """校验 5 字段 cron 表达式基本格式。

    Args:
        expr: 待校验的 cron 表达式字符串，如 ``"0 3 * * 1"``。

    Returns:
        True 表示格式合法，False 表示不合法。
    """
    parts = expr.strip().split()
    if len(parts) != 5:
        return False
    for part, pattern in zip(parts, CRON_FIELD_PATTERNS):
        if not re.fullmatch(pattern, part):
            return False
    return True
