Est-ce que quelqu’un connaît le bon endroit ou des modèles pour vérifier quel numéro de suivi d’entreprise est le numéro de suivi donné pour un colis. Idée Après avoir scanné un code à barres pour un numéro de suivi de vérification de colis avec des modèles et montré à quelle société il a été expédié.
Je pensais juste que je publierais une mise à jour à ce sujet car je travaille sur ce sujet pour correspondre via jquery et sélectionner automatiquement le transporteur approprié. J’ai compilé une liste des expressions rationnelles correspondantes pour mon projet et j’ai testé de nombreux numéros de suivi dans UPS FedEX et USPS.
Si vous rencontrez quelque chose qui ne correspond pas, s’il vous plaît laissez-moi savoir ici via des commentaires et je vais essayer de le faire aussi.
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 différents)
/(\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 différents)
/(\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$/
Veuillez noter que je ne les ai pas trouvés moi-même. J’ai simplement cherché et compilé la liste à partir de différentes sources, y compris certaines qui ont peut-être été mentionnées ici.
Merci
Edit: Correction du délimiteur de fin manquant.
J’ai appuyé sur Royal Mail pour obtenir une regex pour les références de suivi Recorded Delivery & Special Delivery, mais je ne suis pas allé très loin. Même un ensemble complet de règles que je pouvais appliquer était impossible.
Fondamentalement, même après avoir pris environ une semaine et être revenu avec différentes combinaisons de lettres indiquant le type de service, j’ai pu fournir des exemples tirés de notre expérience montrant qu’il existait des combinaisons supplémentaires qui étaient évidemment valides mais qu’elles n’avaient pas documentées.
Les références suivent le format international apparemment standard que je pense que Jefe /^[A-Za-z]{2}[0-9]+GB$/
regex décrirait:
XX123456789GB
Même si cela semble être un format standard, c’est-à-dire que la plupart des envois internationaux ont le même format, les deux dernières lettres désignant le pays d’origine, je n’ai pas pu en savoir plus (toute précision de bienvenue!).
Particulier à Royal Mail semble être l’utilisation des deux premières lettres pour indiquer le niveau de service. J’ai réussi à comstackr une liste de préfixes dénotant une livraison spéciale, mais je ne suis pas convaincu qu’il soit complet à 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
Sans l’un de ces préfixes, le service est enregistré, ce qui donne une confirmation de livraison mais pas de suivi.
Il semble généralement que l’inclusion d’un S, X ou Z dénote un niveau de service plus élevé et je ne pense pas avoir jamais vu un élément de livraison enregistrée normal avec aucune de ces lettres dans le préfixe.
Cependant, comme vous pouvez le voir, il faudrait tester de nombreux préfixes si le niveau de service devait être vérifié à l’aide de regex, et que Royal Mail semble incapable de fournir un ensemble de règles complet, alors essayer de tester le niveau de service peut être futile.
Je dois vérifier les numéros de suivi JUST United States Postal Service (USPS). WikiAnswers dit que mes formats numériques sont les suivants:
USPS n’offre que le suivi avec le courrier express. Il commence généralement par un “E”, une autre lettre, suivie de 9 chiffres et deux autres lettres. USPS a des “numéros d’étiquette” pour les autres services qui ont entre 16 et 22 chiffres.
http://wiki.answers.com/Q/How_many_numbers_in_a_USPS_tracking_number
J’ajoute que les numéros des étiquettes commencent par un “9”, car tous ceux que j’ai des envois personnels des 2 dernières années commencent par un 9.
Donc, en supposant que WikiAnswers est correct, voici ma regex qui correspond aux deux:
/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/
C’est assez simple Voici la ventilation:
^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 ssortingng | - OR ^9 - Basic Track & Ship Number \d{15,21} - followed by 15 to 21 numbers $ - End of ssortingng
En utilisant le testeur de regex de http://www.gummydev.com, ce modèle correspond à mes deux chaînes de test:
EXPRESS MAIL: EK225651436US
NUMÉRO D’ÉTIQUETTE: 9410803699300003725216
** Remarque: Si vous utilisez ColdFusion (je suis), supprimez le premier et le dernier “/” du motif.
Dans le cas où cela aiderait quelqu’un d’autre à le faire, voici une classe Python simple qui résout les formats communs: Gist # 541851
Nous avons fait des recherches sur ce sujet pendant un certain temps et les avons basées principalement sur les réponses ici.
Celles-ci devraient couvrir tout, sans être trop clémentes.
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
Voici quelques exemples de numéros des principaux transporteurs américains:
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)
Modèles que j’utilise (code php). Oui, j’ai abandonné et j’ai commencé à tester tous les modèles à ma disposition. J’ai dû écrire le deuxième 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; }
Vous pouvez essayer ceux-ci (non garantis):
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
Mais s’il vous plaît testez avant de les utiliser. Je recommande RegexBuddy .
Je les utilise dans une application eBay, j’ai écrit:
USPS Domestic:
/^91[0-9]+$/
USPS International:
/^[A-Za-z]{2}[0-9]+US$/
FedEx:
/^[0-9]{15}$/
Cependant, cela peut être spécifique à eBay / Paypal, car toutes les étiquettes USPS Domestic commencent par “91”. Toutes les étiquettes d’USPS International commencent par deux caractères et se terminent par “US”. Autant que je sache, FedEx utilise seulement 15 chiffres aléatoires.
(S’il vous plaît noter que ces expressions régulières supposent que tous les espaces sont supprimés. Il serait assez facile de tenir compte des espaces)
Découvrez ce projet github qui répertorie beaucoup de regex PHP de suivi. https://github.com/darkain/php-tracking-urls
Je crois que FedEx a 12 chiffres:
^[0-9]{12}$
J’ai également trouvé récemment des numéros de suivi de 22 chiffres de FedEx, alors faites attention! Je n’ai pas encore trouvé de référence pour le format général de FedEx.
FedEx Example #: 9612019059803563050071
Voici un regex à jour pour UPS (fonctionne avec des numéros de suivi de type standard et Mail Innovation):
\ b (1Za [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
Voici celles que j’utilise maintenant dans mon application Java. Celles-ci sont déterminées par mon expérience de sucer des numéros de suivi à partir des e-mails de confirmation d’expédition provenant de toute une série de services de livraison directe. Je viens de créer un nouveau USPS à partir de zéro, car aucun de ceux que j’ai trouvé ne fonctionnait pour certains de mes numéros basés sur des exemples sur le site USPS. Celles-ci ne fonctionnent que pour les codes de suivi américains car nous ne vendons qu’aux États-Unis.
private final Pattern UPS_TRACKING_NUMBER = Pattern.comstack("[^A-Za-z0-9](1Z[A-Za-z0-9]{6,})", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final Pattern FEDEX_TRACKING_NUMBER = Pattern.comstack("\\b((96|98)\\d{18,20}|\\d{15}|\\d{12})\\b", Pattern.MULTILINE); private final Pattern USPS_TRACKING_NUMBER = Pattern.comstack("\\b(9[2-4]\\d{20}(?:(?:EA|RA)\\d{9}US)?|(?:03|23|14|70)\\d{18})\\b", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
En retard à la fête cependant, le ci-dessous fonctionnera avec 26 numéros USPS char également.
/(\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
Je sais qu’il y a déjà beaucoup de réponses et que cela a été demandé il y a longtemps, mais je n’en vois pas une qui traite de tous les numéros de suivi USPS possibles avec une seule expression.
Voici ce que j’ai imaginé:
((\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})
Voir cela fonctionne ici: http://regexr.com/3e61u