Je recherche le code postal et l'expression rationnelle ultimes. Je cherche quelque chose qui couvrira la plupart (espérons-le tout) du monde.
regex
zipcode
postal-code
Darryl Hein
la source
la source
Réponses:
Il n'y en a pas.
Les codes postaux / zip dans le monde ne suivent pas un schéma commun. Dans certains pays, ils sont constitués de chiffres, dans d'autres ils peuvent être des combinaisons de chiffres et de lettres, certains peuvent contenir des espaces, d'autres des points, le nombre de caractères peut varier de deux à au moins six ...
Ce que vous pourriez faire (théoriquement), c'est créer un regex séparé pour chaque pays dans le monde, non recommandé par l'OMI. Mais vous seriez toujours absent sur la partie validation: le code postal
12345
peut exister, mais12346
non, il12344
n'existe peut - être pas non plus. Comment vérifiez-vous cela avec une expression régulière?Tu ne peux pas.
la source
^\d{5}(?:[-\s]\d{4})?$
Le CLDR unicode contient l'expression régulière du code postal pour chaque pays. (158 regex au total!)
core.zip
depuis http://unicode.org/Public/cldr/26.0.1/common/supplemental/postalCodeData.xml
contenu décompressé (contenu direct: commun / supplémentaire / postalCodeData.xml )Google a également un service Web avec des informations de formatage par pays, y compris les codes postaux, ici - http://i18napis.appspot.com/address (j'ai trouvé ce lien via http://unicode.org/review/pri180/ )
Éditer
Voici une copie de l' expression régulière postalCodeData.xml :
la source
utiliser ces regx
la source
Chaque système de code postal utilise uniquement AZ et / ou 0-9 et parfois espace / tiret
Tous les pays n'utilisent pas les codes postaux (ex. L'Irlande en dehors de Dublin), mais nous l'ignorerons ici.
Le format de code postal le plus court est la Sierra Leone avec
NN
Le plus long est le Samoa américain avec
NNNNN-NNNNNN
Vous devez autoriser un espace ou un tiret.
Ne doit ni commencer ni se terminer par un espace ou un tiret
Cela devrait couvrir les points ci-dessus:
la source
Essayer de couvrir le monde entier avec une seule expression régulière n'est pas complètement possible, et certainement pas faisable ou recommandé.
Pour ne pas tirer ma corne, mais j'ai écrit quelques expressions régulières assez approfondies que vous pourriez trouver utiles.
Codes postaux canadiens
Codes postaux américains
Codes postaux britanniques
Il n'est pas possible de garantir l'exactitude sans réellement envoyer quelque chose à une adresse et sans que la personne vous informe quand elle le reçoit, mais nous pouvons affiner les choses en éliminant les cas que nous savons mauvais.
la source
Cela ressemble à une bonne référence même si ce n'est pas dans Regex.
Vraiment, sauf si vous expédiez quelque chose à vos utilisateurs, je ne pense pas que cela en vaille la peine. Et si vous êtes expédiez, il y a des outils de nettoyage d'adresses / services que vous pouvez regarder dans pour le rendre plus facile sur vous - même.
la source
Nous utilisons ce qui suit:
Canada
Amérique
Autre
la source
Selon votre application, vous souhaiterez peut-être implémenter une correspondance d'expression régulière pour les pays d'origine de la plupart de vos visiteurs et aucune validation pour le reste (acceptez quoi que ce soit).
la source
Big Jump a oublié les sauts de ligne, les blancs et les caractères de contrôle.
Les codes postaux internationaux sont une sorte de problème d'arrêt.
la source
Veuillez noter que c'est un problème assez difficile, comme indiqué par la réponse acceptée. Je suppose que cela n'a pas dissuadé les gens de geonames.org . Ils ont un fichier un fichier d'informations sur le pays , qui ne correspond pas à cette réponse - la limite est apparemment de 30000 caractères. Il existe des expressions régulières pour environ 150 pays.
J'ai extrait les bits pertinents à cette question ici:
J'espère que je n'ai fait aucune erreur, mon regex-fu est assez faible.
la source
Si quelqu'un souhaite toujours valider les codes postaux, j'ai trouvé une solution:
En utilisant
Google Geocoding API
nous pouvons vérifier la validité du code postal ayant à la fois le code pays et un code postal lui-même.Par exemple, je vis en Ukraine, je peux donc vérifier comme ceci: https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA
Ou en utilisant JS API: https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering
Où
80380
est valide ZIP pour l'Ukraine, en fait chaque (#####) est valide.Google renvoie l'
ZERO_RESULTS
état si rien n'est trouvé. OuOK
et un résultat si les deux sont corrects.J'espère que cela vous sera utile.
la source
Comme d'autres l'ont souligné, une expression rationnelle pour les gouverner tous est peu probable. Cependant, vous pouvez créer des expressions régulières pour autant de pays que vous le souhaitez en utilisant les informations de formatage d'adresse de l'Union postale universelle - une agence des Nations Unies peu connue.
Par exemple, voici les règles de formatage d'adresse, y compris le code postal, pour une poignée de pays (format PDF):
la source
Le problème va être que vous n'avez probablement aucun bon moyen de suivre l'évolution des exigences en matière de code postal des pays de l'autre côté du globe et que vous ne partagez pas de langues communes. À moins que vous n'ayez un budget suffisamment important pour le suivre, vous feriez certainement mieux de confier la responsabilité de la validation des adresses à Google ou Yahoo.
Les deux sociétés fournissent des fonctionnalités de recherche d'adresses via une API programmable.
la source
Pourquoi faites-vous cela et pourquoi vous en souciez-vous? Comme l'a souligné Tom Ritter, peu importe que vous ayez même un code postal, encore moins qu'il soit valide ou non, jusqu'à ce que vous envoyiez quelque chose à cette adresse. Même si vous vous attendez à leur envoyer quelque chose un jour , cela ne signifie pas que vous avez besoin d'un code postal aujourd'hui .
la source
Comme indiqué ailleurs, la variation dans le monde est énorme. Et même si quelque chose qui correspond au motif ne signifie pas qu'il existe.
Ensuite, bien sûr, il existe de nombreux endroits où les codes postaux ne sont pas utilisés (par exemple beaucoup ou en Irlande).
la source
Il y a des raisons au-delà de l'expédition pour avoir un code postal précis. Les agences de voyages effectuant des circuits transfrontaliers (hors zone euro bien sûr) ont besoin de ces informations à l'avance pour les communiquer aux autorités. Souvent, ces informations sont saisies par un agent qui peut ou non être familier avec de telles choses. TOUTE méthode qui peut réduire les erreurs est une bonne idée ™
Cependant, écrire une expression régulière qui couvrirait tous les codes postaux dans le monde serait insensé.
la source
Étant donné qu'il y a tellement de cas marginaux pour chaque pays (par exemple, les adresses de Londres peuvent utiliser un format légèrement différent du reste du Royaume-Uni), je ne pense pas qu'il existe une expression rationnelle ultime autre que peut-être:
Mieux vaut suivre un modèle assez large (enfin pas aussi large que ci-dessus), ou traiter chaque pays / région avec un modèle spécifique qui lui est propre!
METTRE À JOUR: Cependant, il peut être possible de construire dynamiquement une expression régulière basée sur de nombreuses règles plus petites et spécifiques à une région - mais pas sûr des performances!
De nombreux modèles spécifiques aux pays peuvent être trouvés sur le site RegExLib .
la source
Quelqu'un demandait une liste d'adresses de mise en forme, et je pense que c'est ce qu'il cherchait ...
Guide compulsif des adresses postales de Frank: http://www.columbia.edu/~fdc/postal/ n'aide pas beaucoup avec les problèmes au niveau de la rue, cependant.
Mon travail utilise quelques outils pour aider à cela: - Services Lexis-Nexis, y compris les recherches NCOA (vous obtiendrez la normalisation des adresses "gratuitement") - "Melissa Data" http://www.melissadata.com
la source
Il s'agit d'un RegEx très simple pour valider le code postal américain (pas ZipCode Plus Four):
Il semble que les cinq chiffres soient des codes postaux valides
00000
, sauf ,88888
&99999
.J'ai testé ce RegEx avec http://regexpal.com/
SP
la source
Si
Zip Code
autorise les caractères et les chiffres (alphanumériques), l'expression rationnelle ci-dessous serait utilisée là où elle correspond, 5 ou 9 ou 10 caractères alphanumériques avec un hypen (-
):la source