どの会社の追跡番号がパッケージに与えられた追跡番号であるかを確認するための良い場所やパターンを知っている人はいますか?アイデアは、バーコードをスキャンしてパッケージの追跡番号をパターンで確認し、それがどの会社から出荷されたかを示した後です。
18 に答える
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$/
私はこれらを自分で思いついたわけではないことに注意してください。ここで言及されている可能性のあるものを含む、さまざまなソースからリストを検索してコンパイルしました.
ありがとう
編集: 終了区切り文字の欠落を修正しました。
JUST United States Postal Service(USPS)の追跡番号を確認する必要があります。WikiAnswersによると、私の番号の形式は次のとおりです。
USPSは、速達郵便での追跡のみを提供します。通常、「E」で始まり、別の文字が続き、その後に9桁の文字が続き、さらに2文字が続きます。USPSには、16〜22桁の長さの他のサービスの「ラベル番号」があります。
http://wiki.answers.com/Q/How_many_numbers_in_a_USPS_tracking_number
過去2年間の個人貨物からのラベル番号はすべて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を使用している場合(私はそうです)、パターンから最初と最後の「/」を削除してください
以下は、米国の主要な通信事業者のサンプル番号です。
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コード)。はい、あきらめて、自由に使えるすべてのパターンに対してテストを開始しました。2番目の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;
}
Royal Mail に、書留配送と速達便の追跡参照の正規表現を求めましたが、あまりうまくいきませんでした。私が自分でロールバックできるようにするための完全なルールセットでさえ、それらを超えていました。
基本的に、彼らが約 1 週間かけてサービスの種類を示す文字のさまざまな組み合わせを返してきた後でも、私たちの経験から、明らかに有効であるが文書化されていない追加の組み合わせがあることを示す例を提供することができました。
/^[A-Za-z]{2}[0-9]+GB$/
参照は、Jefe の正規表現が記述すると思われる、明らかに標準的な国際形式に従っています。
XX123456789GB
これは標準形式のように見えますが、つまり、ほとんどの国際郵便は最後の 2 文字が原産国を示す同じ形式を持っていますが、この「標準」またはそれがどこから発信されたのかについて、私はこれ以上知ることができませんでした。 (明確化を歓迎します!)。
Royal Mail に特有なのは、サービス レベルを示すために最初の 2 文字を使用しているようです。速達を表す接頭辞のリストを作成できましたが、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 のいずれかが含まれているほどサービス レベルが高いことを示しているようですが、プレフィックスにこれらの文字が含まれる通常の配達記録アイテムを見たことがないと思います。
ただし、ご覧のとおり、正規表現を使用してサービス レベルをチェックする場合にテストする必要がある多くのプレフィックスがあり、Royal Mail が包括的なルール セットを提供できないように思われるという事実を考えると、サービス レベルをテストしようとすることは可能性があります。無駄。
これをしばらく研究しており、主にここの回答に基づいてこれらを作成しました。
これらは、寛大すぎることなく、すべてをカバーする必要があります。
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
フェデックス:
/^(((96|98)\d{5}\s?\d{4}$|^(96|98)\d{2})\s?\d{4}\s?\d{4}(\s?\d{3})?)$/i
これらを試すことができます(保証されていません):
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
米国郵便:
\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をお勧めします。
多くの PHP 追跡正規表現をリストしているこの github プロジェクトを確認してください。 https://github.com/darkain/php-tracking-urls
以下は、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);
私が書いた eBay アプリケーションでこれらを使用します。
USPS 国内:
/^91[0-9]+$/
USPSインターナショナル:
/^[A-Za-z]{2}[0-9]+US$/
フェデックス:
/^[0-9]{15}$/
ただし、すべての USPS 国内ラベルは「91」で始まるため、これは eBay/Paypal 固有のものである可能性があります。すべての USPS インターナショナル ラベルは、2 文字で始まり、「US」で終わります。私の知る限り、FedEx は 15 桁の乱数を使用しています。
(これらの正規表現は、すべてのスペースが削除されていることを前提としていることに注意してください。ただし、スペースを許可するのはかなり簡単です)
FedEx は 12 桁だと思います。
^[0-9]{12}$
最近、FedEx から 22 桁の追跡番号を見つけたので、気をつけてください! FedEx の一般的な形式に関する適切なリファレンスはまだ見つかりません。
フェデックスの例 #: 9612019059803563050071
すでに多くの回答があり、これがずっと前に尋ねられたことは知っていますが、考えられるすべての 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
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