web-dev-qa-db-fra.com

Validation du code postal (US Postal Code)

Je pensais que les gens travailleraient ensemble sur de petits projets de code, mais je ne les vois pas, alors voici un simple:

Code qui valide un code postal américain valide. Je sais qu'il existe des bases de données de codes postaux, mais il y a encore des utilisations, comme des pages Web, une validation rapide, et aussi le fait que les codes postaux continuent d'être émis, donc vous voudrez peut-être utiliser une validation faible.

J'ai écrit un peu sur les codes postaux dans un projet parallèle sur mon wiki/blog:

https://benc.fogbugz.com/default.asp?W24

Il existe également un nouveau type de code postal étrange.

https://benc.fogbugz.com/default.asp?W42

Je peux faire le code javascript, mais il serait intéressant de voir combien de langues nous pouvons obtenir ici.

39
benc

Javascript Regex Literal :

Codes postaux américains: /(^\d{5}$)|(^\d{5}-\d{4}$)/

var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210");

Certains pays utilisent Codes postaux , ce qui ne respecterait pas ce modèle.

54
keparo
function isValidUSZip(sZip) {
   return /^\d{5}(-\d{4})?$/.test(sZip);
}
26
Andrey Fedorov

Voici une fonction JavaScript qui valide un code postal/postal basé sur un code de pays. Il permet un formatage quelque peu libéral. Vous pouvez également ajouter des cas pour d'autres pays. Notez que le cas par défaut autorise les codes postaux vides car tous les pays ne les utilisent pas.

function isValidPostalCode(postalCode, countryCode) {
    switch (countryCode) {
        case "US":
            postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/;
            break;
        case "CA":
            postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/;
            break;
        default:
            postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/;
    }
    return postalCodeRegex.test(postalCode);
}

FYI Le deuxième lien faisant référence aux codes postaux de vanité semble avoir été une blague du poisson d'avril.

6
Mike Henry

Si vous faites pour le Canada, n'oubliez pas que toutes les lettres ne sont pas valides

Ces lettres ne sont pas valides: D, F, I, O, Q ou U Et les lettres W et Z ne sont pas utilisées comme première lettre. Certaines personnes utilisent également un espace facultatif après le 3e caractère.

Voici une expression régulière pour le code postal canadien:

new RegExp(/^[abceghjklmnprstvxy][0-9][abceghjklmnprstvwxyz]\s?[0-9][abceghjklmnprstvwxyz][0-9]$/i)

Le dernier i le rend insensible à la casse.

5
Samer

En voici un extrait du fichier additional-methods.js Du plugin jQuery Validate ...

jQuery.validator.addMethod("zipUS", function(value, element) {
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(value);
}, "Please specify a valid US Zip code.");

[~ # ~] modifier [~ # ~] : Étant donné que le code ci-dessus fait partie du plugin jQuery Validate, il dépend de la fonction .addMethod() méthode.

Supprimez la dépendance aux plugins et rendez-la plus générique ....

function checkZip(value) {
    return (/(^\d{5}$)|(^\d{5}-\d{4}$)/).test(value);
};

Exemple d'utilisation: http://jsfiddle.net/5PNcJ/

3
Shogo Yahagi

Il s'agit d'une bonne solution JavaScript pour le problème de validation que vous avez:

/\b\d{5}-\d{4}\b/
1
TorchLakeDave

Comme je travaille dans l'industrie du courrier depuis 17 ans, j'ai vu toutes sortes d'entrées de données dans ce domaine. Je trouve intéressant de voir combien de personnes ne connaissent pas leur adresse telle qu'elle est définie par l'USPS. Je vois toujours des adresses comme celle-ci:

XYZ College
Département IT
Ville, St Zip

Le pire, c'est le courrier 99% du temps est livré, les 1% restants, eh bien c'est retourné pour une adresse incomplète comme il se doit.

Dans un article précédent, quelqu'un a mentionné USPS CASS, ce logiciel n'est pas gratuit.

Pour regexer un testeur de code postal, c'est bien, j'utilise des expressions pour déterminer si le code postal est US, CA, UK ou AU. J'ai vu des expressions pour le Japon et d'autres qui ne font qu'ajouter des défis dans le choix du bon pays auquel appartient un Zip.

De loin, la meilleure réponse est d'utiliser les listes déroulantes pour l'État et le pays. Utilisez ensuite des tableaux pour valider davantage si nécessaire. Pour vous donner une idée, il y a 84052 combinaisons US City St Zip acceptables sur les 5 premiers chiffres seulement. Il y a 249 pays valides selon l'ISO et il y a 65 États/Territoires américains.

Il existe également des classes militaire, boîte postale et code postal unique. KISS s'applique ici.

1
user2832940

Je vous suggère de jeter un œil aux API d'informations d'adresse USPS. Vous pouvez valider un Zip et obtenir des adresses au format standard. https://www.usps.com/business/web-tools-apis/address-information.htm

1
Carl

Une façon de vérifier le code postal canadien valide est-

function isValidCAPostal(pcVal) {
   return ^[A-Za-z][0-9][A-Za-z]\s{0,1}[0-9][A-Za-z][0-9]$/.test(pcVal);
}

J'espère que cela aidera quelqu'un.

0
Irfan

Pour approfondir ma réponse, UPS et FedEx ne peuvent pas livrer à une boîte postale non sans utiliser l'USPS comme gestionnaire final. La plupart des logiciels d'expédition n'autoriseront pas de PO Box Zip pour leurs services standard. Des exemples de fermetures à glissière PO Box sont 00604 - RAMEY, PR et 06141 - HARTFORD, CT.

Le besoin de valider les codes postaux peut vraiment être une question de savoir jusqu'où vous allez, quel est le budget, quel est le calendrier.

Comme n'importe quoi avec des expressions, testez, testez, testez et testez à nouveau. J'avais une expression pour la validation par l'État et j'ai trouvé que YORK avait réussi quand il devait échouer. La seule fois par milliers, quelqu'un est entré à New York, New York 10279, ugh.

Gardez également à l'esprit que USPS n'aime pas la ponctuation comme N. Market St. et a également des abréviations acceptables très spécifiques pour des choses comme Lane, Place, North, Corporation et similaires.

0
user2832940

Drupal 7 a également une solution simple ici, cela vous permettra de valider contre plusieurs pays.

https://drupal.org/project/postal_code_validation

Vous aurez également besoin de ce module
https://drupal.org/project/postal_code

Testez-le dans http://simplytest.me/

0
pal4life