我有一个客户通过UPS发货,因此无法送到邮政信箱。我希望能够验证客户地址字段,以防止他们输入包含邮政信箱的地址。最好将它作为正则表达式实现,以便我可以使用客户端正则表达式验证控件(ASP.NET)。

我意识到可能没有办法获得100%的检测率,我只是在寻找能够在大部分时间内起作用的东西。

有帮助吗?

解决方案

这应该让你开始。测试以查看Address字段是否与此正则表达式匹配。

"^P\.?\s?O\.?\sB[Oo][Xx]."

翻译为英语:在行的开头是P,后跟可选的句点和空格,后跟一个O,后跟一个可选的句点,后跟一个空格,后跟“Box”,然后是别的什么。

其他提示

UPS也有可以集成的工具来执行此操作......这样您就可以确切地确定地址是否会发货,成本是多少,时间表等等。我建议您访问UPS IT解决方案页面了解更多信息。

您可能最好在页面上放置免责声明警告您无法发送到邮政信箱,而不是验证输入。

如果你创建一个能够捕获大部分P.O.的正则表达式,那么很可能。盒子情景,很有可能它也会抓住你不想要的东西(即一个街道名称包含字母'p''o'和'box'的客户)

我首先使用正则表达式ala Lizard(但使用“忽略大小写”标记:)),对历史数据进行测试,然后在看到测试中看到的无效包含和排除时进行迭代。

大多数送货商(例如FedEx)将验证送货地址。例如,使用FedEx网络服务时,系统会调用验证送货地址并获取估算的费用。这不仅可以确保地址不是邮政信箱,还可以确保地址的其余部分有效。

关于OP对Jason Coco回答的评论:

由于您可以将正则表达式验证添加到送货地址,我认为您可以控制应用程序(即,您拥有源并可以对其进行修改)。如果是这种情况,那么您应该能够在收到提交的数据时检查是否要通过USPS,FedEx或UPS运送,并向相应的托运人专用地址验证器提交请求,从而获得所有杰森回答中提出的好处。

通过使其特定于托运人,这也可以避免实施一刀切的规则,例如“没有邮政信箱,因为UPS不向他们提供”,即使用户可以选择提供给邮政信箱的非UPS托运人。

如果它不以“邮政信箱”开头怎么办?或“P.O。盒及QUOT; ?

示例:

John Schmidt | 银谷邮政信箱3901 | Whereswaldoville,SI。 78946

我使用地址字段的onblur事件来使用javascript函数indexOf来识别input.toUpperCase“PO BOX”。 || " P.O"那是> = 0。

如果找不到这两个搜索中的任何一个,则返回-1,否则返回字符串的起始位置,该位置始终为0或更多。

这将确保懒惰输入,'po box','p.o box'以及'p.o.盒子'将被识别。我想你可以添加'po。盒子'也是。

无论如何,该条件会触发一条不显眼的消息,表明“我们无法发送到邮政信箱地址”。如果它不适用于您,则不会看到它。否则,对于没有启用js或css的用户,他们只会看到该消息。这种优雅降级的唯一失败是如果用户有css,但没有启用js(他们根本就看不到消息)。我今天才想出解决方案,但如果我想到一个更好的方法,我会回来发布它。

不幸的是,UPS的在线软件允许P.O.箱子经过,但一旦他们在航运渠道就会窒息。 在我们的情况下,当我们试图优雅地阻止P.O.时,我们的购物车放弃率上升了。盒。我们发现将它放在一边,接受销售,引起客户服务注意并让它们解决它更具成本效益。 当然,如果您获得P.O Boxes的高发率,这可能不是您的情况。

从最初的问题:

  

我意识到可能无法获得100%的检测率,......

实际上,有。

如果地址首次使用地址验证工具验证并标准化为USPS格式(我所工作的公司制作 YAddress ),然后是所有PO毫无例外的方框地址将拼写为“PO BOX ...”。之后,您可以对它们进行字符串比较,以获得100%准确度的完全匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top