题目背景描述了此题 idea 的来源,跳过此部分不影响做题。
彭彭负责管理车南大学的一些群聊,她写了一个自动审核插件,用来自动审核新入群的成员。
新入群的群成员需要提供自己的姓名和一卡通号,插件会自动检查姓名和一卡通号的格式是否合法,如果合法,就自动通过审核。否则拒绝入群并发送一条消息,告知用户一卡通号格式错误。该用户以后进入人工审核通道。
于是,她写出来的正则表达式长这样:
\s*([\u4e00-\u9fa5]+)\s*[-+\s]?\s*(21\d{7})\s*|\s*(21\d{7})\s*[-+\s]?\s*([\u4e00-\u9fa5]+)\s*
车南大学的一卡通号是 9 位数字,其中前两位 21 是神秘代码,第三位是类型代码,第四到五位是年份代码,剩下四位是编号代码,具体的:
- 前两位
21 保持不变,代表车南大学。
- 第三位,
3 代表本科生,4 代表研究生。
- 第四到五位,
24 代表 2024 年入学,25 代表 2025 年入学,以此类推。
- 第六到九位,是入学序号,从 0001 开始,以此递增,最高 9999。
我们称一个一卡通号是合法的,当且仅当它满足上述条件,即:
- 前两位固定为
21。
- 第三位是
3 或 4。
- 第四到五位年份字段不做限制。
- 后四位入学序号字段不能全为零。
给你一个一卡通号,你需要判断它是否合法,如果合法,输出 YES,否则输出 NO。