Кто-нибудь знает хорошее место или шаблоны для проверки того, какой номер отслеживания компании является данным номером отслеживания для пакета. Идея - после сканирования штрих-кода для проверки номера отслеживания пакета с шаблонами и показать, к какой компании он был отправлен.
Регулярные выражения для отслеживания номеров
Ответ 1
Просто подумал, что я опубликую обновление по этому вопросу, так как я работаю над этим, чтобы соответствовать через jquery и автоматически выбирать соответствующий носитель. Я собрал список подходящего регулярного выражения для моего проекта, и я проверил множество номеров отслеживания в UPS FedEX и USPS.
Если вы сталкиваетесь с чем-то, что не соответствует, пожалуйста, дайте мне знать здесь через комментарии, и я постараюсь также придумать это.
ИБП:
/\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b/
FedEX: (3 разных)
/(\b96\d{20}\b)|(\b\d{15}\b)|(\b\d{12}\b)/
/\b((98\d\d\d\d\d?\d\d\d\d|98\d\d) ?\d\d\d\d ?\d\d\d\d( ?\d\d\d)?)\b/
/^[0-9]{15}$/
USPS: (4 разных)
/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)/
/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/
/^91[0-9]+$/
/^[A-Za-z]{2}[0-9]+US$/
Обратите внимание, что я сам не придумал их. Я просто искал и компилировал список из разных источников, в том числе некоторые из них, которые, возможно, были упомянуты здесь.
Спасибо
Изменить: Исправлен недостающий разделитель.
Ответ 2
Я нажал кнопку "Royal Mail" для регулярного выражения для заметок "Записанная доставка" и "Специальная доставка", но не очень далеко. Даже полный набор правил, чтобы я мог катиться самостоятельно, был за ними.
В принципе, даже после того, как они заняли около недели и вернулись с различными комбинациями букв, обозначающих тип сервиса, я смог привести примеры из нашего опыта, который показал, что были дополнительные комбинации, которые были явно действительны, но что они не документировали.
Ссылки следуют, по-видимому, стандартным международным форматам, которые, как мне кажется, описывается Jefe /^[A-Za-z]{2}[0-9]+GB$/
regex:
XX123456789GB
Несмотря на то, что это, по-видимому, стандартный формат, то есть большинство международных писем имеет тот же формат, где последние две буквы обозначают страну происхождения, я не смог больше узнать об этом "стандарте" или где он исходит из (любое разъяснение приветствуется!).
В частности, Royal Mail, по-видимому, использует первые две буквы для обозначения уровня обслуживания. Мне удалось скомпилировать список префиксов, которые обозначают специальную доставку, но я не уверен, что он на 100% завершен:
AD AE AF AJ AK AR AZ BP CX DS EP HC HP KC KG
KH KI KJ KQ KU KV KW KY KZ PW SA SC SG SH SI
SJ SL SP SQ SU SW SY SZ TX WA WH XQ WZ
Без одного из этих префиксов услугой является "Записанная доставка", которая дает подтверждение доставки, но не отслеживает.
Как правило, включение S, X или Z означает более высокий уровень обслуживания, и я не думаю, что когда-либо видел обычный элемент Recorded Delivery с любой из этих букв в префиксе.
Однако, как вы можете видеть, существует множество префиксов, которые необходимо будет протестировать, если бы уровень сервиса должен был быть проверен с помощью регулярного выражения, и учитывая тот факт, что Royal Mail кажется неспособным предоставить полный набор правил, а затем попытаться проверить работу службы уровень может быть бесполезным.
Ответ 3
Мне нужно проверить номера отслеживания JUST United States Postal Service (USPS). WikiAnswers говорит, что мои числовые форматы выглядят следующим образом:
USPS предлагает только отслеживание с помощью Express mail, обычно начинается с буквы "E", другое письмо, за которым следуют 9 цифр, и еще два письма. У USPS есть "Номера ярлыков" для других служб которые составляют от 16 до 22 цифр долго.
http://wiki.answers.com/Q/How_many_numbers_in_a_USPS_tracking_number
Я добавляю, что номера ярлыков начинаются с "9", поскольку все те, что у меня есть из личных поставок в течение последних двух лет, начинаются с 9.
Итак, если предположить, что WikiAnswers верен, вот мое регулярное выражение, которое соответствует обоим:
/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/
Это довольно просто. Вот прорыв:
^E - Begins w/ E (For express number)
\D{1} - followed by another letter
\d{9} - followed by 9 numbers
\D{2} - followed by 2 more letters
$ - End of string
| - OR
^9 - Basic Track & Ship Number
\d{15,21} - followed by 15 to 21 numbers
$ - End of string
Используя тестер регулярных выражений www.gummydev.com, этот паттерн соответствует обеим тестовым строкам:
ЭКСПРЕСС-ПОЧТА: EK225651436US
НОМЕР ЭЛЕМЕНТОВ: 9410803699300003725216
** Примечание. Если вы используете ColdFusion (я), удалите первый и последний "/" из шаблона
Ответ 4
В случае, если это помогает кому-либо еще найти это, вот простой класс Python, который разрешает общие форматы: Gist # 541851
Ответ 5
Проанализировав это какое-то время, я сделал это в основном на ответах здесь.
Они должны охватывать все, не будучи слишком снисходительным.
UPS:
/^(1Z\s?[0-9A-Z]{3}\s?[0-9A-Z]{3}\s?[0-9A-Z]{2}\s?[0-9A-Z]{4}\s?[0-9A-Z]{3}\s?[0-9A-Z]$|[\dT]\d{3}\s?\d{4}s?\d{3})$/i
USPS:
/^(EA|EC|CP|RA)\d{9}(\D{2})?$|^(7\d|03|23|91)\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}(\s\d{2})?$|^82\s?\d{3}\s?\d{3}\s?\d{2}$/i
FEDEX:
/^(((96|98)\d{5}\s?\d{4}$|^(96|98)\d{2})\s?\d{4}\s?\d{4}(\s?\d{3})?)$/i
Ответ 6
Вот несколько примеров номеров от основных американских перевозчиков:
USPS:
70160910000108310009 (certified)
23153630000057728970 (signature confirmation)
RE360192014US (registered mail)
EL595811950US (priority express)
9374889692090270407075 (regular)
FEDEX:
810132562702 (all seem to follow same pattern regardless)
795223646324
785037759224
UPS:
K2479825491 (UPS ground)
J4603636537 (UPS next day express)
1Z87585E4391018698 (regular)
Шаблоны, которые я использую (php-код). Да, я сдался и начал тестировать все имеющиеся у меня модели. Пришлось написать второй ИБП.
public function getCarrier($trackingNumber){
$matchUPS1 = '/\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b/';
$matchUPS2 = '/^[kKJj]{1}[0-9]{10}$/';
$matchUSPS0 = '/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)/';
$matchUSPS1 = '/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)|(\b\d{26}\b)| ^E\D{1}\d{9}\D{2}$|^9\d{15,21}$| ^91[0-9]+$| ^[A-Za-z]{2}[0-9]+US$/i';
$matchUSPS2 = '/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/';
$matchUSPS3 = '/^91[0-9]+$/';
$matchUSPS4 = '/^[A-Za-z]{2}[0-9]+US$/';
$matchUSPS5 = '/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)|(\b\d{26}\b)| ^E\D{1}\d{9}\D{2}$|^9\d{15,21}$| ^91[0-9]+$| ^[A-Za-z]{2}[0-9]+US$/i';
$matchFedex1 = '/(\b96\d{20}\b)|(\b\d{15}\b)|(\b\d{12}\b)/';
$matchFedex2 = '/\b((98\d\d\d\d\d?\d\d\d\d|98\d\d) ?\d\d\d\d ?\d\d\d\d( ?\d\d\d)?)\b/';
$matchFedex3 = '/^[0-9]{15}$/';
if(preg_match($matchUPS1, $trackingNumber) ||
preg_match($matchUPS2, $trackingNumber))
{
echo('UPS');
$carrier = 'UPS';
return $carrier;
} else if(preg_match($matchUSPS0, $trackingNumber) ||
preg_match($matchUSPS1, $trackingNumber) ||
preg_match($matchUSPS2, $trackingNumber) ||
preg_match($matchUSPS3, $trackingNumber) ||
preg_match($matchUSPS4, $trackingNumber) ||
preg_match($matchUSPS5, $trackingNumber)) {
$carrier = 'USPS';
return $carrier;
} else if (preg_match($matchFedex1, $trackingNumber) ||
preg_match($matchFedex2, $trackingNumber) ||
preg_match($matchFedex3, $trackingNumber)) {
$carrier = 'FedEx';
return $carrier;
} else if (0){
$carrier = 'DHL';
return $carrier;
}
return;
}
Ответ 7
Вы можете попробовать их (не гарантируется):
ИБП:
\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b
ИБП:
\b(1Z ?\d\d\d ?\d\w\w ?\d\d ?\d\d\d\d ?\d\d\d ?\d|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b
USPost:
\b(\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d|\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d)\b
Но проконсультируйтесь, прежде чем использовать их. Я рекомендую RegexBuddy.
Ответ 8
Я использую их в приложении eBay, которое я написал:
USPS Внутренние:
/^91[0-9]+$/
USPS International:
/^[A-Za-z]{2}[0-9]+US$/
FedEx:
/^[0-9]{15}$/
Однако это может быть спецификацией eBay/Paypal, так как все национальные ярлыки USPS начинаются с "91". Все лейблы USPS International начинаются с двух символов и заканчиваются "US". Насколько мне известно, FedEx использует только 15 случайных цифр.
(Обратите внимание, что эти регулярные выражения предполагают, что все пробелы удалены. Было бы довольно легко разрешить пробелы, хотя)
Ответ 9
Проверьте этот проект github, в котором перечислены много регулярных выражений PHP. https://github.com/darkain/php-tracking-urls
Ответ 10
Я считаю, что FedEx составляет 12 цифр:
^[0-9]{12}$
Ответ 11
Я также встретил отслеживающие номера от FedEx с 22 цифрами в последнее время, так что следите! Я еще не нашел хороших ссылок для общего формата FedEx.
Пример FedEx №: 9612019059803563050071
Ответ 12
Здесь обновляется регулярное выражение для ИБП (работает с обычными и почтовыми индексами отслеживания номеров):
\ b (1Z? [0-9A-Z] {3}? [0-9A-Z] {3}? [0-9A-Z] {2}? [0-9A-Z] {4 }? [0-9A-Z] {3}? [0-9A-Z] | [\ dT]\d\d\d?\D\d\d\d\\ d\d\d\\ d\d\d?\d\d\d?\d\d\d\\ d {22,34})\b
Ответ 13
Вот те, которые я сейчас использую в своем приложении Java. Это определяется моим опытом отслеживания номеров сосания из электронных писем с подтверждением доставки из целой кучи услуг корабля-спутника. Я только что создал новый USPS с нуля, так как ни один из тех, что я нашел, не работал для некоторых моих номеров на основе номеров примеров на сайте USPS. Они работают только для кодов отслеживания США, потому что мы продаем их только в США.
private final Pattern UPS_TRACKING_NUMBER =
Pattern.compile("[^A-Za-z0-9](1Z[A-Za-z0-9]{6,})",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
private final Pattern FEDEX_TRACKING_NUMBER =
Pattern.compile("\\b((96|98)\\d{18,20}|\\d{15}|\\d{12})\\b",
Pattern.MULTILINE);
private final Pattern USPS_TRACKING_NUMBER =
Pattern.compile("\\b(9[2-4]\\d{20}(?:(?:EA|RA)\\d{9}US)?|(?:03|23|14|70)\\d{18})\\b",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Ответ 14
Поздно к стороне, однако, ниже будет работать с 26 char номерами USPS.
/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)|(\b\d{26}\b)|^E\D{1}\d{9}\D{2}$|^9\d{15,21}$|^91[0-9]+$|^[A-Za-z]{2}[0-9]+US$/i
Ответ 15
Я знаю, что есть много ответов и что это было задано давно, но я не вижу ни одного, который учитывал бы все возможные номера отслеживания USPS с одним выражением.
Вот что я придумал:
((\d{4})(\s?\d{4}){4}\s?\d{2})|((\d{2})(\s?\d{3}){2}\s?\d{2})|((\D{2})(\s?\d{3}){3}\s?\D{2})
Посмотрите, как это работает: http://regexr.com/3e61u
Ответ 16
Я работаю в приложении Angular2+ и просто собираю компонент для обработки общих номеров отслеживания в США. Он тестирует их, используя стандартный JavaScript RegExp, который я собрал из этого ресурса ЗДЕСЬ и ЗДЕСЬ, и устанавливает href для тега привязки с URL-адресом ссылки отслеживания, если это хорошо. Вам не нужно использовать Angular или TypeScript, чтобы легко адаптировать его к вашему приложению. Я проверил это с разными фиктивными числами и до сих пор работал динамически. Обратите внимание, что вы также можете отключить значение NULL в последнем операторе else с помощью встроенного URL-адреса с комментариями, и он отправит вас на поиск в Google.
Любой отзыв (или если ваши номера отслеживания не работают), пожалуйста, дайте мне знать, я обновлю ответ. Спасибо!
ИСПОЛЬЗОВАНИЕ В HTML:
<app-tracking-number [trackNum]="myTrackingNumberInput"></app-tracking-number>
КОМПОНЕНТ.TS
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-tracking-number',
templateUrl: './tracking-number.component.html',
styleUrls: ['./tracking-number.component.scss']
})
export class TrackingNumberComponent implements OnInit {
@Input() trackNum:string;
trackNumHref:string = null;
// Carrier tracking numbers patterns from https://www.iship.com/trackit/info.aspx?info=24 AND https://www.canadapost.ca/web/en/kb/details.page?article=how_to_track_a_packa&cattype=kb&cat=receiving&subcat=tracking
isUPS:RegExp = new RegExp('^1Z[A-H,J-N,P,R-Z,0-9]{16}$'); // UPS tracking numbers usually begin with "1Z", contain 18 characters, and do not contain the letters "O", "I", or "Q".
isFedEx:RegExp = new RegExp('^[0-9]{12}$|^[0-9]{15}$'); // FedEx Express tracking numbers are normally 12 digits long and do not contain letters AND FedEx Ground tracking numbers are normally 15 digits long and do not contain letters.
isUSPS:RegExp = new RegExp('^[0-9]{20,22}$|^[A-Z]{2}[0-9,A-Z]{9}US$'); // USPS Tracking numbers are normally 20-22 digits long and do not contain letters AND USPS Express Mail tracking numbers are normally 13 characters long, begin with two letters, and end with "US".
isDHL:RegExp = new RegExp('^[0-9]{10,11}$'); // DHL tracking numbers are normally 10 or 11 digits long and do not contain letters.
inCAPost:RegExp = new RegExp('^[0-9]{16}$|^[A-Z]{2}[0-9]{9}[A-Z]{2}$'); // 16 numeric digits (0000 0000 0000 0000) AND 13 numeric and alphabetic characters (AA 000 000 000 AA).
constructor() { }
ngOnInit() {
this.setHref();
}
setHref() {
if(!this.trackNum) this.trackNumHref = null;
else if(this.isUPS.test(this.trackNum)) this.trackNumHref = 'https://wwwapps.ups.com/WebTracking/processInputRequest?AgreeToTermsAndConditions=yes&loc=en_US&tracknum=${this.trackNum}&Requester=trkinppg';
else if(this.isFedEx.test(this.trackNum)) this.trackNumHref = 'https://www.fedex.com/apps/fedextrack/index.html?tracknumber=${this.trackNum}';
else if(this.isUSPS.test(this.trackNum)) this.trackNumHref = 'https://tools.usps.com/go/TrackConfirmAction?tLabels=${this.trackNum}';
else if(this.isDHL.test(this.trackNum)) this.trackNumHref = 'http://www.dhl.com/en/express/tracking.html?AWB=${this.trackNum}&brand=DHL';
else if(this.inCAPost.test(this.trackNum)) this.trackNumHref ='https://www.canadapost.ca/trackweb/en#/search?searchFor=${this.trackNum}';
else this.trackNumHref = null; // Google search as fallback... 'https://www.google.com/search?q=${this.trackNum}';
}
}
КОМПОНЕНТ.HTML
<a *ngIf="trackNumHref" [href]="trackNumHref" target="_blank">{{trackNum}}</a>
<span *ngIf="!trackNumHref">{{trackNum}}</span>