Rexact
Cheatsheet

Regex shipping container number (ISO 6346)

A container number isn't just "4 letters + 7 digits": the 4th letter must be U (freight), J (detachable equipment) or Z (trailer/chassis) - never anything else. An older version of the npm library validator.js only accepted U, wrongly rejecting J and Z containers that are perfectly valid under the standard. The current version fixes that, but introduces a subtler bug: due to | operator precedence, the end anchor only applies to one branch of the alternation, letting stray text slip in after an otherwise correct number. Here's a pattern covering all three categories without that trap, compared against both validator.js versions and a third attempt.

/^[A-Z]{3}[UJZ][0-9]{7}$/
passes 20/20 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^[A-Z]{3}[UJZ][0-9]{7}$", "");
re.test(input);

Limits

  • Valide seulement la FORME (4 lettres, catégorie U/J/Z, 7 chiffres) : ne calcule pas le chiffre de contrôle (conversion lettre→chiffre puis somme pondérée modulo 11) — un numéro syntaxiquement valide selon ce motif peut avoir une clé fausse et ne correspondre à aucun conteneur réellement enregistré (voir CSQU3054384 dans les exemples, structure correcte mais clé fausse).
  • Ne consulte pas le registre officiel BIC (bic-code.org) : seule une recherche dans ce registre confirme qu'un préfixe de 3 lettres est réellement attribué à un propriétaire de conteneurs.
  • N'accepte que les majuscules, conformément à la présentation officielle : un numéro de conteneur physiquement peint en minuscules ou mélangé doit être normalisé avant validation.
  • Ne différencie pas les trois catégories dans son résultat (fret, équipement détachable, remorque/châssis) : ce motif confirme seulement que la 4e lettre appartient à l'une des trois, sans indiquer laquelle.