regex 防止地址与邮政信箱的最佳策略?

ncecgwcz  于 2023-01-10  发布在  其他
关注(0)|答案(8)|浏览(102)

我有一个通过UPS发货的客户,因此无法投递到邮政信箱。我希望能够验证客户地址字段,以防止他们输入包含邮政信箱的地址。最好将其实现为正则表达式,以便我可以使用客户端正则表达式验证控件(ASP.NET)。
我意识到可能没有办法得到100%的检测率,我只是在寻找一些将工作的大部分时间。

4sup72z8

4sup72z81#

UPS也有您可以集成的工具来完成这项工作...这样您就可以准确地验证地址是否会发货、费用是多少、时间表等。我建议访问UPS IT解决方案页面以了解更多信息。

hk8txs48

hk8txs482#

这应该可以让你开始。测试看看地址字段是否匹配这个正则表达式。

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

翻译成英语:行首是P,后面是可选的句点和空格,后面是O,后面是可选的句点,后面是空格,后面是“Box”,后面是任何其他字符。

ct2axkht

ct2axkht3#

您可能最好在页面上放一个免责声明,警告您不能运送到邮政信箱,而不是验证输入。
如果你创建了一个正则表达式,它很有可能捕捉到大多数邮政信箱场景,那么它也很有可能捕捉到你不想捕捉的东西(比如,一个街道名称中包含字母“p”、“o”和“box”的客户)

x9ybnkn6

x9ybnkn64#

不幸的是,UPS的在线软件允许邮政信箱通过,但一旦进入运输渠道,就会被卡住。在我们的案例中,当我们试图优雅地阻止邮政信箱时,我们的购物车放弃率上升了。我们发现,不去管它,接受销售,提请客户服务部门注意,让他们解决问题,这要划算得多。当然,如果你得到一个高发病率的pido-box,这可能不是你的情况。

46qrfjad

46qrfjad5#

我会从一个regex ala Lizard开始(但是使用“ignore case”标志:)),测试历史数据,然后迭代,看看在测试中看到了什么无效的包含和排除。

vm0i2vca

vm0i2vca6#

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

flvtvl50

flvtvl507#

关于OP对Jason Coco回答的评论:
由于您可以向送货地址添加regex验证,因此我假设您可以控制应用程序(即,您有来源,并可以修改它)。如果是这种情况,那么您应该有能力,在收到提交的数据,检查它是否要通过美国邮政,联邦快递,或UPS运送,并提交请求到适当的托运人特定的地址验证器,获得杰森回答中提到的所有好处。
通过使其特定于托运人,这也将允许您避免实施一刀切的规则,如“没有邮政信箱,因为UPS不交付给他们”,即使用户可以选择非UPS托运人谁交付给邮政信箱。

iqih9akk

iqih9akk8#

如果不是以"邮政信箱"开头呢?
示例:
约翰·施密特|银谷邮政信箱3901|威斯康星州惠尔斯瓦尔多维尔,邮编:78946
我对地址字段使用了onblur事件,以便使用JavaScript函数indexOf来识别输入。||"P. O",即〉= 0。
如果这两个搜索中的任何一个都没有找到,则返回-1,否则,它将返回字符串的起始位置,该位置将始终为0或更大。
这将确保lazy typing、"po box"、"p.o. box"以及"p.o. box"将被识别。我想您也可以添加"po.box"。
无论如何,这个条件触发了一个不显眼的消息,显示"我们不能发送到一个邮政信箱地址。"这是一个功能,如果它不适用于你就看不到它。否则,对于没有启用js或css的用户来说,他们只会看到消息。这种优雅降级的唯一失败是如果用户有css,但没有启用js(他们根本看不到消息)。我今天才想出解决方案,但如果我想到更好的方法,我会回来在这里发布。

相关问题