先写清验证目标
编写正则表达式前,先用完整句子说明允许的格式与必须拒绝的边界。对于电话、邮箱或身份类字段,字符形状只是其中一层;长度、国家或机构规则以及所有权验证需要分别处理。
本速查表面向 JavaScript 正则语法。匹配成功并不能证明输入真实或可信;电子邮件、身份、URL 与安全检查仍需业务规则和服务端验证。
在实时工具中测试 →编写正则表达式前,先用完整句子说明允许的格式与必须拒绝的边界。对于电话、邮箱或身份类字段,字符形状只是其中一层;长度、国家或机构规则以及所有权验证需要分别处理。
至少准备一个应当匹配的样本、一个应当拒绝的样本,以及一个超长或错误输入。使用全局标志时检查全部匹配和 lastIndex;处理多行文本时分别验证 m 与 s 的影响。
在目标运行时再次执行表达式,并覆盖 Unicode 字符和异常换行。限制用户提供的表达式;在用恶意长输入测量嵌套量词的回溯成本之前,不要把正则当作安全边界。
单个正则表达式并不是嵌套 JSON、HTML、编程语言、自由格式邮寄地址或完整邮箱标准的可靠解析器。应先使用相应解析器或领域库,只把正则用于范围明确且已说明限制的预检查。
| 语法 | 含义 | 示例 |
|---|---|---|
. | 除换行符外的任意单个字符 | a.c |
\d / \D | 数字 / 非数字 | \d{4} |
\w / \W | ASCII 单词字符 / 其反集 | \w+ |
[a-z] / [^a-z] | 范围 / 否定字符类 | [A-F0-9] |
^ / $ | 输入或行的开头 / 结尾 | ^OK$ |
| 语法 | 含义 | 示例 |
|---|---|---|
* / + / ? | 零次或多次 / 一次或多次 / 可选 | https? |
{n} / {n,m} | 精确次数或范围重复 | \d{2,4} |
(abc) / (?:abc) | 捕获组 / 非捕获组 | (?:png|webp) |
(?<name>...) | 命名捕获组 | (?<year>\d{4}) |
(?=...) / (?!...) | 正向 / 负向先行断言 | \d+(?=px) |
| 语法 | 含义 | 示例 |
|---|---|---|
g | 查找全部匹配,而非在首个匹配处停止 | — |
i | 忽略大小写 | — |
m | 让 ^ 与 $ 按行生效 | — |
s | 允许 . 匹配换行符 | — |
u / v | Unicode 模式;请检查引擎支持 | — |
正则只能检查候选格式。可送达性和所有权仍需要验证邮件。
设计不当的嵌套量词可能造成大量回溯。请限制输入、测试模式,并隔离不受信任的表达式。