Лучшие стратегии для предотвращения адресов с абонентскими ящиками?

У меня есть клиент, который отправляет через UPS и поэтому не может доставлять в почтовые ящики. Я хотел бы иметь возможность проверять поля адреса клиента, чтобы они не могли вводить адреса, которые включают почтовый ящик. Было бы лучше, если бы это было реализовано как регулярное выражение, чтобы я мог использовать контроль проверки регулярных выражений на стороне клиента (ASP.NET).

Я понимаю, что, вероятно, нет способа получить 100% -ную скорость обнаружения, я просто ищу что-то, что будет работать большую часть времени.


person LockeCJ    schedule 11.11.2008    source источник


Ответы (8)


Это должно помочь вам начать. Проверьте, соответствует ли поле адреса этому регулярному выражению.

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

Перевод на английский язык: это буква P в начале строки, за которой следует необязательная точка и пробел, за которым следует O, за которой следует необязательная точка, за которой следует пробел, за которым следует «Box», за которым следует что-либо еще.

person Bill the Lizard    schedule 11.11.2008
comment
Одна небольшая поправка к этому регулярному выражению: я бы начал его с ^\s* перед P, чтобы несколько пробелов, введенных в начале поля, не испортили его. - person Dave Sherohman; 12.11.2008
comment
Я отмечаю это как принятый ответ, потому что он наиболее актуален для поставленной задачи. Другой подход проверки адреса через оператора связи также очень хорош, просто он не соответствует нашим текущим срокам. Некоторая комбинация двух подходов, вероятно, является лучшей в целом. - person LockeCJ; 12.11.2008
comment
@LockeCJ: я бы, вероятно, использовал регулярное выражение в Javascript на стороне клиента и использовал решение Джейсона Коко на сервере. - person Bill the Lizard; 12.11.2008
comment
@Dave, вы должны использовать string.trim, прежде чем применять регулярное выражение. - person Jeff; 08.12.2010
comment
для нас, нубов... ^[Pp]\.?\s?[Oo]\.?\s[Bb][Oo][Xx] поэтому текст не обязательно должен быть в верхнем регистре P и O и B также удалили . в конце - person jplara; 05.08.2015

У UPS также есть инструменты, которые вы можете интегрировать для этого... таким образом вы можете точно проверить адрес, чтобы узнать, будут ли они отправлены, какова будет стоимость, расписание и т. д. Я предлагаю посетить страницу ИТ-решений UPS для Дополнительная информация.

person Jason Coco    schedule 11.11.2008
comment
Бьюсь об заклад, они примут ваши адреса доставки и проведут предварительную проверку перед тем, как забрать товар, возможно, предложив скидку, если вы это сделаете. В их интересах, чтобы это тоже было доставлено. - person dkretz; 11.11.2008
comment
К сожалению, я не думаю, что это осуществимо в краткосрочной перспективе. Во-первых, страница, на которой клиент вводит свой адрес доставки, отличается от той, на которой он связывается с UPS. Это хорошо, но неудобно. Во-вторых, программное обеспечение поддерживает USPS, FedEx и UPS, что все усложняет. Спасибо, в любом случае. - person LockeCJ; 11.11.2008

Возможно, вам лучше разместить на странице отказ от ответственности, предупреждающий, что вы не можете отправлять в почтовые ящики, а не проверять ввод.

Более чем вероятно, что если вы создадите регулярное выражение, которое улавливает большую часть P.O. Сценарии коробки, есть большая вероятность, что он также поймает вещи, которые вы не планировали (например, клиент с названием улицы, содержащим буквы «p», «o» и «box»)

person John    schedule 11.11.2008
comment
Довольно просто создать регулярное выражение, которое соответствует почтовому ящику 123, но не соответствует действительным адресам. - person Bill the Lizard; 11.11.2008
comment
Согласованный. Мы всегда собирались включить на страницу заявление об отказе от ответственности, но хотели отловить большинство случаев, когда пользователь не читает, хотя этого практически никогда не бывает :) - person LockeCJ; 11.11.2008
comment
@Bill: Да, в этом сценарии это правда; однако не все будут вводить адрес именно так (с точками) @Locke: Конечно! кто не читает инструкции при заполнении формы? :) - person John; 11.11.2008
comment
@John: Представленное мной регулярное выражение будет соответствовать почтовому ящику, почтовому ящику, почтовому ящику и многим другим вариантам без ложных срабатываний на реальных адресах. - person Bill the Lizard; 12.11.2008

К сожалению, онлайн-программное обеспечение UPS позволяет P.O. Коробки, которые нужно пройти, но они задохнутся, как только они окажутся в канале доставки. В нашем случае уровень брошенных корзин увеличился, когда мы попытались изящно предотвратить P.O. Коробки. Мы пришли к выводу, что гораздо выгоднее оставить проблему в покое, принять сделку, довести ее до сведения службы поддержки клиентов и позволить им решить ее. Конечно, если у вас много абонентских ящиков, это может быть не для вас.

person bluescrubbie    schedule 28.09.2011

Я бы начал с регулярного выражения а-ля Lizard (но использовал флаг «игнорировать регистр» :)), протестировал исторические данные, а затем повторял, когда вы видите, какие недопустимые включения и исключения вы видите при тестировании.

person dkretz    schedule 11.11.2008
comment
Я бы не стал использовать флаг игнорирования регистра в этом конкретном случае. Тестирование может показать, что P и O должны быть заглавными, а прямоугольник должен быть в любом случае. Использование синтаксиса регулярных выражений более гибко для изменения. - person Bill the Lizard; 11.11.2008

Большинство служб доставки (например, FedEx) проверяют адрес доставки. Например, в веб-службах FedEx есть вызов для проверки адреса доставки и получения ориентировочной стоимости. Это не только гарантирует, что адрес не является абонентским ящиком, но также гарантирует, что остальная часть адреса действительна.

person TAG    schedule 12.11.2008

Что касается комментария ОП к ответу Джейсона Коко:

Поскольку вы можете добавить проверку регулярного выражения к адресу доставки, я предполагаю, что вы контролируете приложение (т. е. у вас есть исходный код и вы можете его изменить). Если это так, то у вас должна быть возможность после получения отправленных данных проверить, должны ли они быть отправлены через USPS, FedEx или UPS, и отправить запрос соответствующему валидатору адреса отправителя, получив все преимущества, предложенные в ответе Джейсона.

Сделав его специфичным для отправителя, это также позволит вам избежать применения универсальных правил, таких как «никаких почтовых ящиков, потому что UPS не доставляет им», даже если пользователь может выбирать грузоотправителей, не входящих в UPS. которые доставляют на абонентские ящики.

person Dave Sherohman    schedule 12.11.2008
comment
Ответ Джейсона не подходит только в краткосрочной перспективе. Я полностью согласен с тем, что необходимо более общее решение проблемы. Как только мы сможем уделять больше времени этой проблеме, мы определенно пойдем в этом направлении. Кроме того, как указано выше, поток приложения делает этот подход менее привлекательным. - person LockeCJ; 12.11.2008

Что, если оно не начинается с «PO Box...» или «P.O. Box»?

Пример:

Джон Шмидт | Почтовый ящик Серебряной долины 3901 | Гдесвальдовиль, SI. 78946

Я использовал событие onblur для поля адреса, чтобы использовать функцию javascript indexOf для распознавания input.toUpperCase "PO BOX" || "P.O", то есть >= 0.

Если любой из этих двух поисков не найден, возвращается -1, в противном случае возвращается начальная позиция строки, которая всегда будет равна 0 или больше.

Это гарантирует, что ленивый ввод, «абонентский ящик», «абонентский ящик», а также «абонентский ящик» не будут использоваться. коробка' будет распознана. Я полагаю, вы могли бы добавить «po. коробка тоже.

В любом случае, условие вызывает ненавязчивое сообщение, показывающее, что «Мы не можем отправить на адрес почтового ящика». Это функция, чтобы не видеть его, если оно не относится к вам. В противном случае для пользователей, у которых нет или включен css, они просто увидят сообщение. Единственный сбой в этой изящной деградации - это если у пользователя есть css, но не включен js (где они просто не увидят сообщение вообще). Я придумал только решение сегодня, но если я придумаю лучший способ, я вернусь, чтобы опубликовать его здесь.

person Evan Smith    schedule 02.12.2009