我有一个通过 UPS 运送的客户,因此无法运送到邮政信箱。我希望能够验证客户地址字段,以防止他们输入包含邮政信箱的地址。最好将其实现为正则表达式,以便我可以使用客户端正则表达式验证控件 (ASP.NET)。
我意识到可能没有办法获得 100% 的检测率,我只是在寻找可以在大多数情况下工作的东西。
我有一个通过 UPS 运送的客户,因此无法运送到邮政信箱。我希望能够验证客户地址字段,以防止他们输入包含邮政信箱的地址。最好将其实现为正则表达式,以便我可以使用客户端正则表达式验证控件 (ASP.NET)。
我意识到可能没有办法获得 100% 的检测率,我只是在寻找可以在大多数情况下工作的东西。
UPS 也有工具,您可以集成来执行此操作……这样您就可以准确地验证地址,以确定他们是否会发货、成本是多少、时间表等。我建议访问 UPS IT 解决方案页面更多信息。
这应该让你开始。测试地址字段是否匹配此正则表达式。
"^P\.?\s?O\.?\sB[Oo][Xx]."
翻译成英文:那是行首的P,后面是一个可选的句点和空格,然后是一个O,后面是一个可选的句点,然后是一个空格,然后是“Box”,然后是其他任何内容。
您最好在页面上放置一个免责声明,警告您不能运送到邮政信箱,而不是验证输入。
如果您确实创建了一个捕获大多数邮政信箱场景的正则表达式,那么很有可能它也会捕获您不想要的东西(即街道名称包含字母“p”“o”的客户和“盒子”)
不幸的是,UPS 的在线软件允许邮政信箱通过,但一旦它们进入运输渠道就会窒息。在我们的例子中,当我们试图优雅地阻止邮政信箱时,我们的购物车放弃率上升了。我们发现将其搁置一旁,接受销售,将其提交给客户服务部门并让他们解决它更具成本效益。当然,如果您的邮政信箱发生率很高,那么您的情况可能并非如此。
我将从一个正则表达式 ala Lizard 开始(但使用“忽略大小写”标志:)),测试历史数据,然后在您看到测试中看到的无效包含和排除时进行迭代。
大多数运输提供商(例如 FedEx)将验证送货地址。例如,使用 FedEx 网络服务,需要验证送货地址并获取估计费用。这不仅可以确保该地址不是邮政信箱,还可以确保该地址的其余部分有效。
关于 OP 对 Jason Coco 回答的评论:
由于您可以将正则表达式验证添加到送货地址,我假设您可以控制应用程序(即,您拥有源代码并且可以修改它)。如果是这种情况,那么您应该能够在收到提交的数据后,检查它是通过 USPS、FedEx 还是 UPS 运送,并向适当的发件人特定地址验证器提交请求,从而获得所有杰森的回答中建议的好处。
通过使其特定于托运人,这也将允许您避免实施一刀切的规则,例如“没有邮政信箱,因为 UPS 不向他们发货”,即使用户可以选择非 UPS 托运人谁确实交付到邮政信箱。
如果它不以“PO Box..”或“PO Box”开头怎么办?
例子:
约翰施密特 | 银谷邮政信箱 3901 | 哪里斯瓦尔多维尔,SI。78946
我为地址字段使用了 onblur 事件,以使用 javascript 函数 indexOf 来识别 input.toUpperCase "PO BOX" || “PO”>= 0。
如果没有找到这两个搜索中的任何一个,则返回 -1,否则,它将返回字符串的起始位置,该位置始终为 0 或更多。
这将确保惰性输入、“po box”、“po box”以及“po box”都能被识别。我想你可以添加'po。盒子'也是如此。
无论如何,该条件会触发一条不显眼的消息,显示“我们无法运送到邮政信箱地址。”如果它不适用于您,这是一个看不到它的功能。否则,对于没有 js 的用户或启用css,他们只会看到消息。这种优雅降级的唯一失败是如果用户启用了css,但没有启用js(他们根本看不到消息)。我只想出了今天解决了,但是如果我想到更好的方法,我会回来在这里发布。