正则适合快速筛选和轻量校验,但不要把一个表达式写成无法维护的规则大全。实际使用时应配合样本文本测试边界、空值和异常输入。

几个常见示例

中国大陆手机号可用 ^1[3-9]\d{9}$ 做基础格式检查;邮箱可用 ^[^\s@]+@[^\s@]+\.[^\s@]+$ 做轻量判断;纯数字可用 ^\d+$;两位小数金额可用 ^\d+(?:\.\d{1,2})?$。

这些示例偏向实用而不是覆盖所有标准。邮箱、URL、身份证等复杂格式应根据业务规则再收紧,并准备足够的正反样本。

锚点和边界决定匹配范围

^ 和 $ 用来限制整段文本的开头和结尾。没有锚点时,表达式可能只匹配到字符串中的一小段,导致本该失败的输入通过校验。

在多行模式下,锚点含义可能随实现变化。处理日志或批量文本时,要确认工具或语言的正则选项是否开启了 multiline、global 或 ignore case。

转义和贪婪匹配最容易出错

点号、括号、问号、星号等字符在正则里有特殊含义。想匹配字面量点号时要写成 \.,在字符串代码里还可能需要再次转义。

.* 默认会尽可能多地匹配内容。解析 HTML、日志或括号内容时,优先使用更明确的字符范围,或用非贪婪写法减少误伤。

上线前用样本验证

至少准备正常样本、空字符串、前后空格、中文字符、超长输入和特殊符号。每改一次表达式,都用同一组样本重新测试。

正则适合第一道格式门槛。真正重要的数据还要在后端做二次校验,避免只依赖前端提示。

立即处理

使用相关工具

常见问题

关于这个问题

能不能用一个正则完整校验 URL?

可以写得很复杂,但维护成本高。多数场景建议用 URL 解析器或语言内置 URL API 做严格解析。

为什么复制到代码里后正则失效了?

常见原因是字符串转义层级不同,例如 \d 在某些语言字符串中需要写成 \\d。