Rexact
Cheatsheet

Regex Indian PIN code

An Indian PIN code has 6 digits, the first from 1 to 9. A Drupal module had a regex where '[1-9]{3}' required the first three digits to be non-zero: '110001' (Connaught Place, Delhi) was rejected, a bug reported in 2008. Its fix, reused by GeeksforGeeks, now accepts '111111' and '100000', codes that do not exist: only about 19,584 of the 900,000 possible PINs are assigned. Here's a pattern that also excludes the two-digit prefixes never used (10, 29, 35, 54, 55, 65, 66, 86 to 89), compared against those real attempts.

/^(?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{2} ?[0-9]{3}$/
passes 22/22 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{2} ?[0-9]{3}$", "");
re.test(input);

Limits

  • Valide seulement la FORME (6 chiffres, premier chiffre 1 à 9, préfixes à deux chiffres connus comme inutilisés exclus) : ne vérifie pas qu'un PIN est réellement attribué. Seuls environ 19 584 des 900 000 combinaisons possibles le sont, d'après le jeu de données data.gov.in de 2019 : « 111111 » passe, alors qu'il n'existe pas.
  • Les préfixes exclus (10, 29, 35, 54, 55, 65, 66, 86 à 89) viennent d'un jeu de données de 2019 et correspondent à la liste qu'utilise validator.js : si India Post ouvre un nouveau préfixe, ce motif le rejettera à tort. Le préfixe 9, le service postal de l'armée, est accepté, même si ce jeu de données n'en contient aucun.
  • L'espace après le 3e chiffre (« 400 001 ») est une convention d'écriture qu'on trouve sur le web, pas une règle officielle : aucune page d'India Post n'a pu être consultée pour confirmer la forme exacte. Normalisez le code en 6 chiffres collés avant de le stocker.
  • N'accepte qu'une seule espace, ASCII, à cet emplacement : « 110 001 » (deux espaces), « 1100 01 » ou une tabulation sont rejetés, contrairement à la regex de GeeksforGeeks qui accepte n'importe quel espace blanc.

Postal codes for other countries

Related pages