Validation des codes postaux britanniques à l’aide d’expressions régulières

Je souhaite valider un champ avec un code postal britannique. Quelle expression régulière pourrait être utilisée pour valider ce champ?. (([AZ]{1,2}[0-9][0-9A-Z]{0,1})\ ([0-9][AZ]{2}))|(GIR\ 0AA)$ ne semble valide car il a l’exception GIR 0AA .

Alors, aidez-moi à écrire une expression sans exception

Si vous voulez dire code postal, wikipedia a une section sur la validation . Une regex qu’il recommande est:

 ((A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|([E|N|NW|SE|SW|W]1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|[SW|W]([1-9][0-9]|[2-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]{2} 

L’avantage de celui-ci est qu’il capture certaines zones et certains dissortingcts invalides.

Remarque latérale: GIR 0AA est répertorié en tant qu’exception dans votre expression régulière car il s’agit d’un code postal britannique valide pour des raisons essentiellement historiques (recherchez-le dans l’article de Wikipedia, une mention spéciale est donnée à cet effet).

Il n’existe pas d’expression régulière sortingviale que vous puissiez écrire pour valider un code postal britannique, car rien ne garantit par exemple que GU78 2AB est valide (la zone extérieure de GU78 ne peut contenir que 2A A mais pas 2A B ), alors que GU77 2AB être considéré comme valide.

Vous pouvez utiliser une expression régulière pour valider la forme et la structure d’un morceau de texte afin de déterminer s’il correspond aux conditions requirejses pour être considéré comme un code postal. Je crois que, de manière générale, l’expression régulière suivante satisfera à cela:

 (([AZ]{1,2}[0-9]{1,2})\ ([0-9][AZ]{2}))|(GIR\ 0AA)$ 
 ^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$