是否有人知道检查哪个公司跟踪号是包的给定跟踪号的好地方或模式。想法是在扫描条形码后查找带有图案的包裹检查跟踪编号,并显示它所运送的公司。
答案 0 :(得分:41)
我想我会在此处发布更新,因为我正在通过jquery进行匹配并自动选择合适的运输公司。我为我的项目编制了一个匹配的正则表达式列表,我测试了UPS FedEX和USPS中的大量跟踪数字。
如果您遇到不匹配的内容,请通过评论告诉我,我也会尝试提供。
UPS:
/\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$/
请注意,我自己没有拿出这些。我只是搜索并编译了不同来源的列表,包括可能在这里提到的一些。
由于
编辑:修复了缺少结束分隔符。
答案 1 :(得分:5)
我按下了皇家邮政的正版用于Recorded Delivery& amp;特殊交付跟踪参考,但没有走得太远。即使是一套完整的规则,所以我可以自己推出,也超出了他们的范围。
基本上,即使在他们花了大约一个星期并且回来后用各种字母组合表示服务类型,我能够提供我们的经验中的例子,这些例子表明有其他组合明显有效,但他们没有记录
参考文献遵循我认为Jefe的/^[A-Za-z]{2}[0-9]+GB$/
正则表达式所描述的明显标准的国际格式:
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
如果没有这些前缀之一,该服务就是Recorded Delivery,它提供交付确认但没有跟踪。
通常情况下,包含S,X或Z表示更高的服务水平,我认为我从未见过正常的Recorded Delivery项目,前缀中包含任何这些字母。
但是,正如您所看到的,如果要使用正则表达式检查服务级别,则需要测试许多前缀,并且鉴于Royal Mail似乎无法提供全面的规则集,然后尝试测试服务水平可能是徒劳的。
答案 2 :(得分:3)
我需要验证JUST美国邮政服务(USPS)跟踪号码。 WikiAnswers说我的数字格式如下:
USPS仅提供Express跟踪 邮件,通常以“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的正则表达式测试程序,这个模式匹配我的两个测试字符串:
EXPRESS MAIL:EK225651436US
标签号:9410803699300003725216
**注意:如果您正在使用ColdFusion(我是),请从模式中删除第一个和最后一个“/”
答案 3 :(得分:2)
您可以尝试这些(不保证):
UPS:
\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
UPS:
\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。
答案 4 :(得分:2)
如果它帮助其他人搜索此内容,这里有一个简单的Python类来解析常见格式:Gist #541851
答案 5 :(得分:2)
已经研究了一段时间,并且主要基于这里的答案做出这些
这些应该涵盖一切,而不是太宽松
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 :(得分:2)
以下是美国主要航空公司的一些样本编号:
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代码)。是的,我放弃了,并开始测试我可以使用的所有模式。不得不写第二个UPS。
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 :(得分:1)
我在我写的eBay应用程序中使用这些:
USPS国内:
/^91[0-9]+$/
USPS International:
/^[A-Za-z]{2}[0-9]+US$/
<强>联邦快递:强>
/^[0-9]{15}$/
然而,这可能是eBay / Paypal特定的,因为所有USPS国内标签都以“91”开头。所有USPS International标签都以两个字符开头,以“US”结尾。据我所知,FedEx只使用了15个随机数字。
(请注意,这些正则表达式假设所有空格都被删除了。虽然允许空格很容易)
答案 8 :(得分:1)
对于我的用例,我需要更强大的功能。我不断遇到不完整,不正确或过于冗长的示例,而对正确性没有任何改善。希望这可以帮助其他人!它涵盖了其他答案中的所有不同格式,以及更多其他格式,并且与其他一些答案不同,FedEx和USPS之间没有重叠。
\b([A-Z]{2}\d{9}[A-Z]{2}|(420\d{9}(9[2345])?)?\d{20}|(420\d{5})?(9[12345])?(\d{24}|\d{20})|82\d{8})\b
\b1Z[A-Z0-9]{16}\b
\b([0-9]{12}|100\d{31}|\d{15}|\d{18}|96\d{20}|96\d{32})\b
大部分来自:
| Tracking Number | Kind | Tracking Carrier |
|------------------------------------|-------------------------------------|------------------|
| 03071790000523483741 | USPS 20 | USPS |
| 71123456789123456787 | USPS 20 | USPS |
| 4201002334249200190132607600833457 | USPS 34v2 | USPS |
| 4201028200009261290113185417468510 | USPS 34v2 | USPS |
| 420221539101026837331000039521 | USPS 91 | USPS |
| 71969010756003077385 | USPS 91 | USPS |
| 9505511069605048600624 | USPS 91 | USPS |
| 9101123456789000000013 | USPS 91 | USPS |
| 92748931507708513018050063 | USPS 91 | USPS |
| 9400111201080805483016 | USPS 91 | USPS |
| 9361289878700317633795 | USPS 91 | USPS |
| 9405803699300124287899 | USPS 91 | USPS |
| EK115095696SA | S10 | USPS |
| 1Z5R89390357567127 | UPS | UPS |
| 1Z879E930346834440 | UPS | UPS |
| 1Z410E7W0392751591 | UPS | UPS |
| 1Z8V92A70367203024 | UPS | UPS |
| 1ZXX3150YW44070023 | UPS | UPS |
| 986578788855 | FedEx Express (12) | FedEx |
| 477179081230 | FedEx Express (12) | FedEx |
| 799531274483 | FedEx Express (12) | FedEx |
| 790535312317 | FedEx Express (12) | FedEx |
| 974367662710 | FedEx Express (12) | FedEx |
| 1001921334250001000300779017972697 | FedEx Express (34) | FedEx |
| 1001921380360001000300639585804382 | FedEx Express (34) | FedEx |
| 1001901781990001000300617767839437 | FedEx Express (34) | FedEx |
| 1002297871540001000300790695517286 | FedEx Express (34) | FedEx |
| 61299998820821171811 | FedEx SmartPost | USPS |
| 9261292700768711948021 | FedEx SmartPost | USPS |
| 041441760228964 | FedEx Ground | FedEx |
| 568283610012000 | FedEx Ground | FedEx |
| 568283610012734 | FedEx Ground | FedEx |
| 000123450000000027 | FedEx Ground (SSCC-18) | FedEx |
| 9611020987654312345672 | FedEx Ground 96 (22) | FedEx |
| 9622001900000000000000776632517510 | FedEx Ground GSN | FedEx |
| 9622001560000000000000794808390594 | FedEx Ground GSN | FedEx |
| 9622001560001234567100794808390594 | FedEx Ground GSN | FedEx |
| 9632001560123456789900794808390594 | FedEx Ground GSN | FedEx |
| 9400100000000000000000 | USPS Tracking | USPS |
| 9205500000000000000000 | Priority Mail | USPS |
| 9407300000000000000000 | Certified Mail | USPS |
| 9303300000000000000000 | Collect On Delivery Hold For Pickup | USPS |
| 8200000000 | Global Express Guaranteed | USPS |
| EC000000000US | Priority Mail Express International | USPS |
| 9270100000000000000000 | Priority Mail Express | USPS |
| EA000000000US | Priority Mail Express | USPS |
| CP000000000US | Priority Mail International | USPS |
| 9208800000000000000000 | Registered Mail | USPS |
| 9202100000000000000000 | Signature Confirmation | USPS |
答案 9 :(得分:1)
查看这个列出了大量PHP跟踪正则表达式的github项目。 https://github.com/darkain/php-tracking-urls
答案 10 :(得分:1)
以下是我在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);
答案 11 :(得分:0)
这里是一个很棒的资源,它捕获了几乎所有的可能性,并且与我发现的一样紧:
https://andrewkurochkin.com/blog/code-for-recognizing-delivery-company-by-track
string[] upsPattern = new string[]
{
"^(1Z)[0-9A-Z]{16}$",
"^(T)+[0-9A-Z]{10}$",
"^[0-9]{9}$",
"^[0-9]{26}$"
};
string[] uspsPattern = new string[]
{
"^(94|93|92|94|95)[0-9]{20}$",
"^(94|93|92|94|95)[0-9]{22}$",
"^(70|14|23|03)[0-9]{14}$",
"^(M0|82)[0-9]{8}$",
"^([A-Z]{2})[0-9]{9}([A-Z]{2})$"
};
string[] fedexPattern = new string[]
{
"^[0-9]{20}$",
"^[0-9]{15}$",
"^[0-9]{12}$",
"^[0-9]{22}$"
};
答案 12 :(得分:0)
// UPS-联合服务 最后的字符串UPS =“ \ 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] | T \ d {3}?\ d {4}?\ d {3})\ b“;
// USPS-美国邮政服务-格式1 最终字符串USPS_FORMAT1 =“ \ b((420?\ d {5}?)?(91 | 92 | 93 | 94 | 01 | 03 | 04 | 70 | 23 | 13)\ d {2}?\ d {4 }?\ d {4}?\ d {4}?\ d {4}(?\ d {2,6})?)\ b“;
// USPS-美国邮政局-格式2 最终字符串USPS_FORMAT2 =“ \ b((M | P [AZ]?| D [CZ] | LK | E [AC] | V [AZ] | R [AZ] | CP | CJ | LC | LJ)?\ d {3}?\ d {3}?\ d {3}?[AZ]?[AZ]?)\ b“;
// USPS-美国邮政局-格式3 最终字符串USPS_FORMAT3 =“ \ b(82?\ d {3}?\ d {3}?\ d {2})\ b”;
// FEDEX-联邦快递 最后的字符串FED_EX =“ \ b((((96 \ d \ d | 6 \ d)\ d {3}?\ d {4} | 96 \ d {2} | \ d {4})?\ d {4 }?\ d {4}(?\ d {3})?)\ b“;
// ONTRAC final String ONTRAC =“ \ b(C \ d {14})\ b”;
// DHL 最终字符串DHL =“ \ b(\ d {4} [-]?\ d {4} [-]?\ d {2} | \ d {3} [-]?\ d {8} | [AZ { 3} \ d {7})\ b“;
Sample tracking number
UPS
//"1Z 999 AA1 01 2345 6784"
Fed-ex
// "449044304137821"
USPS
//"9400 1000 0000 0000 0000 00"
final Pattern pattern = Pattern.compile(DHL, Pattern.CASE_INSENSITIVE |
Pattern.UNICODE_CASE);
final Matcher matcher = pattern.matcher("1Z 999 AA1 01 2345 6784");
if (matcher.find()) {
System.out.println(true + "");
}
它可以在Java和android中使用。 https://regex101.com/ 您可以通过此链接将正则表达式更改为另一种语言正则表达式,并生成代码。
答案 13 :(得分:0)
我正在Angular2 +应用程序中工作,只是将一个组件组合在一起以处理常见的美国跟踪号码。它使用我从该资源HERE和HERE汇集的标准JavaScript RegExp对它们进行了测试,并在跟踪链接URL良好的情况下在锚定标记上设置了href。您不必使用Angular或TypeScript即可轻松地将其适应您的应用程序。我用不同的虚拟数字进行了测试,到目前为止,它似乎可以动态运行。请注意,您也可以在最后的else语句中使用带注释的内嵌网址替换掉null,它将带您进入Google搜索。
任何反馈(或者如果您的跟踪号码无效),请让我知道我将更新答案。谢谢!
在HTML中的用法:
Schema::create('city', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->enum('visibilty', ['Visible', 'Invisible'])->default('Invisible');
$table->string('created_by')->nullable();
$table->softDeletes();
$table->dateTime('created_at')->default(\DB::raw('DATETIME'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
});
组件.TS
<app-tracking-number [trackNum]="myTrackingNumberInput"></app-tracking-number>
组件.HTML
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.
isCAPost: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.isCAPost.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}`;
}
}
答案 14 :(得分:0)
我知道已经有很多答案,这是很久以前的问题,但是我没有看到单一的答案,只用一个表达式来解决所有可能的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
答案 15 :(得分:0)
然而,对于派对来说,以下内容也适用于26个字母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
答案 16 :(得分:0)
这是UPS的最新正则表达式(适用于常规和邮件创新类型跟踪号码):
\ 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
答案 17 :(得分:0)
我最近也发现联邦快递的追踪号码为22位,所以要小心! 我还没有找到任何关于联邦快递的一般格式的好参考。
FedEx示例#:9612019059803563050071
答案 18 :(得分:0)
我相信FedEx是12位数:
^[0-9]{12}$