You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular中编写匹配PO Box与RR Box的正则表达式?

街道地址特殊格式校验正则优化方案

原正则存在的问题

  1. 转义错误:用字符串定义正则时,\b未转义为\\b,会被解析为退格符而非单词边界,导致匹配逻辑失效。
  2. 覆盖不全:仅处理了PO BOX相关变体,未覆盖RR # Box #、Personal Mail Box、PMB #这三类目标格式。
  3. 匹配不灵活:对分隔符(空格、点号)、数字部分的匹配逻辑不完善,无法兼容常见的格式变体(如RR.12.Box.34、Personal.Mail.Box)。

优化后的正则实现

直接使用正则字面量(避免转义问题),同时覆盖所有目标格式,兼容大小写和常见变体:

// 匹配所有需触发校验的地址格式,大小写不敏感
const addressRegex = /\b(?:RR[\s.#]*\d+[\s.#]*Box[\s.#]*\d+|Personal[\s.]*Mail[\s.]*Box|PMB[\s.#]*\d+|P(?:ost(?:al)?[\s.]*)?(?:O[\s.]*)?Box)\b/i;

正则分支解释

  • RR[\s.#]*\d+[\s.#]*Box[\s.#]*\d+:匹配RR后跟任意空白/点号/井号,接着数字,再Box和后续的分隔符+数字(兼容RR #12 Box 34、RR.12.Box.34等变体)。
  • Personal[\s.]*Mail[\s.]*Box:匹配Personal Mail Box的各类分隔符变体(如Personal.Mail.Box、Personal Mail.Box)。
  • PMB[\s.#]*\d+:匹配PMB后跟任意分隔符+数字(兼容PMB #56、PMB.56等)。
  • P(?:ost(?:al)?[\s.]*)?(?:O[\s.]*)?Box:覆盖PO BOX的所有常见变体(如Post Office Box、P.O. Box、Post Box、P.O.Box)。

使用示例

// 测试不同地址
const testAddresses = [
  "456 Oak Ave",
  "RR #78 Box 90",
  "Personal Mail Box 12",
  "PMB.34",
  "P.O. Box 56",
  "Postal Office Box 78"
];

testAddresses.forEach(addr => {
  addressRegex.test(addr) 
    ? console.log(`地址「${addr}」触发校验`) 
    : console.log(`地址「${addr}」未触发校验`);
});

额外说明

  • 若允许RR和Box后无数字(仅匹配RR Box格式),可将对应分支改为RR[\s.#]*Box。
  • 如需严格限制分隔符仅为空格/井号/点号,保持现有[\s.#]即可;如需兼容更多分隔符,可替换为[\W](匹配非单词字符)。

内容的提问来源于stack exchange,提问作者happytohelp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:01:43