PO Box地址校验正则误拦截含Box合法地址 该如何优化修正
PO Box地址校验正则误拦截修复方案
问题根源
当前正则仅校验是否存在PO Box相关的特征字符串,未限制Box后的内容,所以会误匹配Boxwood这类包含Box前缀的普通地址字符串。
优化思路
在原有特征匹配规则后追加校验逻辑,要求匹配到Box类特征后,必须跟随「可选空白字符+至少1位数字」,仅符合该规则才判定为邮政信箱。
修改后完整代码
// 正则改为静态编译模式,避免每次调用重复初始化,提升高频调用性能 private static readonly Regex poBoxReg = new Regex(@"(?i)\b(?:p(?:ost)?\.?\s*[o0](?:ffice)?\.?\s*b(?:[o0]x)?|b[o0]x)\s*\d+", RegexOptions.Compiled); private static bool IsPostOfficeBox(string add1, string add2) { if (add1 == null) return false; var isPOBox = poBoxReg.IsMatch(add1); if (add2 == null || isPOBox) return isPOBox; return poBoxReg.IsMatch(add2); }
校验效果验证
- 可正常拦截的场景:
PO Box 123、Post Office Box 456、P.O. Box 789、Box 012、P0 B0x 345(兼容用0代替O的手写场景) - 不会误拦截的场景:
42 Boxwood Ln、Boxing Club Rd、123 Boxer Ave
内容的提问来源于stack exchange,提问作者ITGuy1926
相关产品推荐
相关产品推荐

