2009-07-17 16 views

Répondre

68

codes postaux canadiens ne peuvent pas contenir les lettres D, F, I, O, Q ou U, et ne peut pas démarrer avec W ou Z:

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

Si vous voulez un espace en option au milieu:

[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ] ?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9] 
+4

+1 pour «Les codes postaux canadiens ne peuvent pas avoir certaines lettres». Vous pourriez également ajouter que la lettre principale est plus restreinte, puis la deuxième et la troisième. –

+0

merci une tonne de réponse ... cela fonctionne bien pour les codes comme M4B1E8 ... mais il ne fonctionnera pas pour M4B 1E8. Postes Canada pourrait avoir de l'espace après 3 caractères ... référence ici: http: //www.mongabay.com/igapo/toronto_zip_codes.htm – Jimmy

+6

Idéalement, vous devriez ignorer les espaces en entrée et normaliser les données dans un format canonique pour le stockage. De cette façon, les gens peuvent entrer des codes postaux avec ou sans espaces, et cela n'aura aucune importance. Vous pouvez les formater à des fins de production si nécessaire. – Rob

2

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 
} 
+0

J'ai modifié ma réponse à exclure des lettres non valides dans le premier caractère, comme par http://www.infinitegravity.ca/postalcodeformat.htm. – Templar

+3

Si vous ne voulez pas avoir à faire deux barres obliques pour chaque barre oblique, utilisez un littéral @ chaîne comme dans '@" \ A [ABCEGHJKLMNPRSTVXY] \ d [A-Z]? \ D [A-Z] \ d \ z "'. – cdmckay

0

Quelque chose comme ceci:

^[A-Z]\d[A-Z] \d[A-Z]\d$ 
+1

Toutes les lettres ne sont pas valides dans les codes postaux. – Tilendor

1

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] 
0

Essayez ceci:

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; 
} 
-2
class Program 
{ 
    static void Main(string[] args) 
    { 
     string c1; 
     string c2; 
     string c3; 
     string c4; 
     string c5; 
     string c6; 
     string c7; 
     int sortie; 
     bool parfais = true; 


     Console.WriteLine("entrer votre code postal"); 
     string cp = Console.ReadLine(); 
     if (cp.Length == 7) 
     { 

      c1 = cp.Substring(0, 1); 
      c2 = cp.Substring(1, 1); 
      c3 = cp.Substring(2, 1); 
      c4 = cp.Substring(3, 1); 
      c5 = cp.Substring(4, 1); 
      c6 = cp.Substring(5, 1); 
      c7 = cp.Substring(6, 1); 



      if (int.TryParse(c1, out sortie)) 
      { 
       parfais = false; 
       Console.WriteLine("le 1er caratere doit etre une lettre"); 
      } 

      if (int.TryParse(c2, out sortie) == false) 
      { 
       parfais = false; 
       Console.WriteLine("le 2e caratere doit etre un nombre"); 
      } 

      if (int.TryParse(c3, out sortie)) 
      { 
       parfais = false; 
       Console.WriteLine("le 3e caratere doit etre une lettre"); 
      } 



      if (c4.Contains(" ") == false) 
      { 
       parfais = false; 
       Console.WriteLine("vous devez utiliser un espace"); 
      } 



      if (int.TryParse(c5, out sortie) == false) 
      { 
       parfais = false; 
       Console.WriteLine("le 5e caratere doit etre un nombre"); 
      } 

      if (int.TryParse(c6, out sortie)) 
      { 
       parfais = false; 
       Console.WriteLine("le 6e caratere doit etre une lettre"); 
      } 

      if (int.TryParse(c7, out sortie) == false) 
      { 
       parfais = false; 
       Console.WriteLine("le 7e caratere doit etre un nombre"); 
      } 

      else if(parfais == true) 
      { 
       Console.WriteLine("code postal accepter"); 
       Console.ReadLine(); 
      } 


     } 

      else 
      { 
       Console.WriteLine("le code postal doit contenir 7 caratere incluant l'espace"); 

      } 


     Console.ReadLine(); 
+1

L'OP veut utiliser des expressions régulières. Il n'y en a pas dans cette réponse. –

Questions connexes