我有一个客户通过UPS发货,因此无法送到邮政信箱。我希望能够验证客户地址字段,以防止他们输入包含邮政信箱的地址。最好将它作为正则表达式实现,以便我可以使用客户端正则表达式验证控件(ASP.NET)。
我意识到可能无法获得100%的检测率,我只是在寻找能够在大部分时间内起作用的东西。
答案 0 :(得分:6)
UPS也有可以集成的工具来执行此操作......这样您就可以确切地确定地址是否会发货,成本是多少,时间表等等。我建议您访问UPS IT解决方案页面了解更多信息。
答案 1 :(得分:3)
这应该让你开始。测试以查看Address字段是否与此正则表达式匹配。
"^P\.?\s?O\.?\sB[Oo][Xx]."
翻译成英文:在行的开头有一个P,后跟一个可选的句点和空格,后跟一个O,然后是一个可选的句点,后跟一个空格,接着是“Box”,后跟任何东西其他
答案 2 :(得分:1)
您可能最好在页面上放置免责声明警告您无法发送到邮政信箱,而不是验证输入。
如果你创建一个能够捕获大部分P.O.的正则表达式,那么很可能。盒子情景,很有可能它也会抓住你不想要的东西(即一个街道名称包含字母'p''o'和'box'的客户)
答案 3 :(得分:0)
我首先使用正则表达式ala Lizard(但使用“忽略大小写”标志:)),对历史数据进行测试,然后在看到测试中看到的无效包含和排除时进行迭代。
答案 4 :(得分:0)
大多数送货商(例如FedEx)将验证送货地址。例如,使用FedEx网络服务时,系统会调用验证送货地址并获取估算的费用。这不仅可以确保地址不是邮政信箱,还可以确保地址的其余部分有效。
答案 5 :(得分:0)
关于OP对Jason Coco回答的评论:
由于您可以将正则表达式验证添加到送货地址,我认为您可以控制应用程序(即,您拥有源并可以对其进行修改)。如果是这种情况,那么您应该能够在收到提交的数据时检查是否要通过USPS,FedEx或UPS运送,并向相应的托运人专用地址验证器提交请求,从而获得所有杰森回答中提出的好处。
通过使其特定于托运人,这也可以避免实施一刀切的规则,例如“没有邮政信箱,因为UPS无法向他们提供”,即使用户可以选择非-UPS托运人确实交付给邮政信箱。
答案 6 :(得分:0)
如果它不以“PO Box ..”或“P.O. Box”开头怎么办?
示例:
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(他们根本就看不到消息)。我只是来了今天解决方案,但如果我想到一个更好的方法,我会回来发布它。
答案 7 :(得分:0)
不幸的是,UPS的在线软件允许P.O.箱子经过,但一旦他们在航运渠道就会窒息。 在我们的情况下,当我们试图优雅地阻止P.O.时,我们的购物车放弃率上升了。盒。我们发现将它放在一边,接受销售,引起客户服务注意并让它们解决它更具成本效益。 当然,如果您获得P.O Boxes的高发率,这可能不是您的情况。
答案 8 :(得分:0)
从原始问题开始:
我意识到可能无法获得100%的检测率,...
实际上,有。
如果首先使用地址验证工具(我工作的公司制造YAddress)将地址验证并标准化为USPS格式,则所有P.O。邮箱地址无一例外将被拼写为“ PO BOX ...”。之后,您可以对它们进行字符串比较,以达到100%准确的精确匹配。