web-dev-qa-db-fra.com

Validation du code postal canadien

Je dois valider un code postal canadien (par exemple, M4B 1C7) à l'aide d'expressions régulières C # (.NET).

48
Jimmy

Les codes postaux canadiens ne peuvent contenir les lettres D, F, I, O, Q ou U et ne peuvent pas commencer par W ou Z:

[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]

Si vous voulez un espace optionnel au milieu:

[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]
77
Gordon Gustafson

Je suggère ce qui suit:

bool FoundMatch = false;
try {
    FoundMatch = Regex.IsMatch(SubjectString, "\\A[ABCEGHJKLMNPRSTVXY]\\d[A-Z] ?\\d[A-Z]\\d\\z");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}
2
Templar

Voici les règles http://en.wikipedia.org/wiki/Postal_code#Reserved_characters

ABCEGHJKLMNPRSTVXY <-- letter used 
DFIOQU <-- letters not used because it mixes up the reader
WZ     <-- letters used but not in the first letter
With that in mind the following in the proper regex

@[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]
2
user3111634

Quelque chose comme ça:

^[A-Z]\d[A-Z] \d[A-Z]\d$
1
Colin Mackay

Essaye ça:

function postalCodeCheck (postalCode, type) {

    if (!postalCode) {
        return null;
    }

    postalCode = postalCode.toString().trim();

    var us = new RegExp("^\\d{5}(-{0,1}\\d{4})?$");
   // var ca  = new RegExp(/^((?!.*[DFIOQU])[A-VXY][0-9][A-Z])|(?!.*[DFIOQU])[A-VXY][0-9][A-Z]\ ?[0-9][A-Z][0-9]$/i);
    var ca = new RegExp(/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]( )?\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i);

    if(type == "us"){
        if (us.test(postalCode.toString())) {
            console.log(postalCode);
            return postalCode;
        }
    }

    if(type == "ca")
    {
        if (ca.test(postalCode.toString())) {
            console.log(postalCode);
            return postalCode;
        }
    }

    return null;
}
1
mmadush

Valider le format d'un code postal sans en valider la signification n'en vaut pas la peine, car les fautes de frappe peuvent toujours donner un code postal valide pour la mauvaise adresse. Vous souhaitez valider le code par rapport à la base de données d'adresses. Voir http://www.canadapost.ca/cpo/mc/business/productsservices/atoz/postalcodeproducts.jsf

0
joe snyder