实战校验

匹配你每天都会遇到的格式——整数、小数、十六进制颜色、时间、日期、邮箱、slug、IP、邮编等等。

阅读规则:指南中的“常用正则” →反复操练:格式校验 →

本课程建立在环视之上

你将学到

数字 十六进制颜色 时间与日期 邮箱 slug 与 IP 地址

步骤 · 14

  1. 01校验真实世界讲解
  2. 02整数狩猎
  3. 03小数狩猎
  4. 04十六进制颜色狩猎
  5. 0524 小时制时间狩猎
  6. 06ISO 日期狩猎
  7. 07简单邮箱狩猎
  8. 08URL slug狩猎
  9. 09IPv4 地址狩猎
  10. 10美国 ZIP 邮编狩猎
  11. 11话题标签狩猎
  12. 12用户名狩猎
  13. 13高尔夫:短十六进制狩猎
  14. 14校验完成讲解

用正则校验格式

校验用的正则只回答一个问题:这段文本的格式对不对?注册表单、电子表格和配置文件里满是应该长成某种样子的值,比如时间、日期、颜色代码或邮箱地址。用 ^ 和 $ 把正则包起来,它就必须匹配整个值,多出的空格或字符都通不过检查。

每种格式都由小部件搭成。\d 是一个数字,{4} 要求恰好四个,? 让某部分变成可选的,而 (am|pm) 这样的分组列出允许的选项。数字范围最需要小心:(100|[1-9]?\d) 覆盖 0 到 100,而 \d+ 连 250 也会接受。这个课程的每次狩猎里,你都要写一个校验正则,抓住正确的值,放过那些差一点就对的。

要清楚正则能知道什么。它只检查格式,不检查含义。除非你为每个月份另写分支,否则日期正则会照单全收 31/02/2026;邮箱正则也无法判断邮箱是否真的存在。把正则当作快速的第一道过滤,再让真正的代码去核对日历、发送确认邮件或查找记录。

示例

  1. /^(0?[1-9]|1[0-2]):[0-5]\d ?(am|pm)$/i

    抓住

    • 9:30 am
    • 12:05PM
    • 07:45 pm

    放过

    • 13:00 pm
    • 9:60 am
    • 9:30

    12 小时制时间:小时为 1 到 12,前导零可有可无;i 标志让 pm 和 PM 都能通过。

  2. /^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/\d{4}$/

    抓住

    • 05/11/2026
    • 31/12/1999
    • 31/02/2026

    放过

    • 5/11/2026
    • 12/13/2026
    • 32/01/2026

    日和月都检查了范围,但 31/02/2026 照样通过,因为正则只懂格式,不懂日历。

  3. /^[A-Z]{3}-\d{4}$/

    抓住

    • ABC-1234
    • XYZ-0042

    放过

    • AB-1234
    • abc-1234
    • ABC-12345
    • ABC1234

    一个产品编号:恰好三个大写字母、一个连字符和四位数字,锚点会拒绝任何更长的内容。

  4. /^(100|[1-9]?\d)%$/

    抓住

    • 0%
    • 42%
    • 100%

    放过

    • 101%
    • 07%
    • 42

    [1-9]?\d 覆盖 0 到 99 且不带前导零,100 单独占一个分支。

常见错误

  • 忘了锚点。 没有 ^ 和 $,匹配四位数字的正则也会接受 12345 和 abc2026,因为它在中间某处找到了匹配。
  • 点号没有转义。 在小数或域名里,. 匹配任意字符,所以 3x14 会混过数字检查;要匹配真正的点号,请写 \.。
  • 想用一个正则囊括所有特殊情况。 完全符合标准的邮箱正则长达数百个字符;一个简短的正则加一封确认邮件,更容易读懂,也能发现更多真实的错误。

阅读规则:指南中的“常用正则” →反复操练:格式校验 →

延伸阅读:邮箱正则:可直接复制、真正好用的写法 →

延伸阅读:IPv4 地址的正则表达式:正确匹配 0 到 255 →