web-dev-qa-db-ja.com

追跡番号の正規表現パターン

どの会社の追跡番号が荷物に指定された追跡番号であるかを確認するための良い場所またはパターンを誰もが知っていますか。アイデアは、パッケージの追跡バーコードのパターンをバーコードでスキャンした後、出荷元の会社を示すことです。

55
Bob

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$/

私はこれらを自分で思いついていないことに注意してください。ここで言及された可能性のあるものを含め、さまざまなソースからリストを単純に検索してコンパイルしました。

ありがとう

編集:終了区切り文字の欠落を修正しました。

41
Adil

記録配達と特別配達の追跡参照の正規表現をロイヤルメールに押しましたが、それほど遠くには行きませんでした。独自のルールをロールバックできるようにするための一連のルールでさえ、それらを超えていました。

基本的に、彼らが約1週間かかって、サービスの種類を示す文字のさまざまな組み合わせで戻ってきた後でも、明らかに有効であるが文書化されていない追加の組み合わせがあることを示す経験から例を提供することができました。

参照は、Jefeの/^[A-Za-z]{2}[0-9]+GB$/ regexは以下を説明します。

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

これらのプレフィックスが1つもない場合、サービスは配信確認ですが、追跡は行いません。

一般に、S、X、またはZを含めることは、より高いサービスレベルを示し、接頭辞にこれらの文字のいずれかを含む通常の記録済み配達アイテムを見たことがないと思われます。

ただし、ご覧のように、正規表現を使用してサービスレベルを確認する場合、テストする必要のあるプレフィックスが多くあり、Royal Mailが包括的なルールセットを提供できず、サービスレベルをテストしようとする場合があります無駄。

5
Lunatik

米国郵政公社(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(私)を使用している場合は、パターンから最初と最後の「/」を削除してください

3
molaro

これらを試すことができます(保証されていません):

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 をお勧めします。

2
David Pokluda

主な米国の通信事業者のサンプル番号は次のとおりです。

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;

}
2
stackOverFlew

しばらくこれを調査し、ここでの回答に主に基づいてこれらを作成しました。
これらは寛大にならずにすべてをカバーする必要があります。
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

2
Josh Blancett

他の人がこれを検索するのに役立つ場合、一般的な形式を解決する簡単なPythonクラス: Gist#541851

2
Erik Karulf

多数のPHP追跡正規表現。 https://github.com/darkain/php-tracking-urls

1
integrii

以下は私の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); 
1
Datbates

私が書いたeBayアプリケーションでこれらを使用します。

SPS国内:

/^91[0-9]+$/

SPS International:

/^[A-Za-z]{2}[0-9]+US$/

FedEx:

/^[0-9]{15}$/

ただし、これはすべてのUSPS国内ラベルが「91」で始まるため、eBay/Paypal固有の場合があります。すべてのUSPS Internationalラベルは2文字で始まり、「US」で終わります。私の知る限り、FedExは15桁のランダムな数字を使用します。

(これらの正規表現は、すべてのスペースが削除されることを前提としていることに注意してください。スペースを許可するのはかなり簡単です)

1
Jefe

UPSの最新の正規表現を次に示します(通常の追跡番号とMail Innovationタイプの追跡番号で動作します)。

\ 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

0
user2242092

すでに多くの答えがあり、これはかなり前に尋ねられたことを知っていますが、単一の表現で可能なすべての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/3e61

0
Joshua Goossen

また、最近22桁のFedExからの追跡番号に遭遇したので、気をつけてください!私はまだFedExの一般的な形式に関する適切なリファレンスを見つけていません。

フェデックスの例#:9612019059803563050071

0
Soleone

FedExは12桁だと思います:

^[0-9]{12}$
0
user282568

ただし、パーティーに遅れて、以下は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
0
Ray

私はAngular2 +アプリで作業しており、一般的な米国の追跡番号を処理するコンポーネントをまとめています。このリソースから作成した標準のJavaScript RegExpを使用してテストします [〜#〜] here [〜#〜][〜#〜] here [〜#〜] =アンカータグのhrefにトラッキングリンクURLを設定します(適切な場合)。これをアプリケーションに簡単に適合させるためにAngularまたはTypeScriptを使用する必要はありません。異なるダミー番号でテストし、これまでのところ動的に動作するようです。インラインのコメント付きURLで最後のelseステートメントのnullを切り替えると、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.
    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}`;
    }

}

コンポーネント.HTML

<a *ngIf="trackNumHref" [href]="trackNumHref" target="_blank">{{trackNum}}</a>
<span *ngIf="!trackNumHref">{{trackNum}}</span>
0
Shane McCurdy