Validación de código postal canadiense

Necesito validar un código postal canadiense (por ejemplo, M4B 1C7 ) usando expresiones regulares C # (.NET).

Los códigos postales canadienses no pueden contener las letras D, F, I, O, Q o U, y no pueden comenzar con W o Z:

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

Si quieres un espacio opcional en el medio:

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

Sugiero lo siguiente:

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

Aquí están las reglas 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] 

Algo como esto:

 ^[AZ]\d[AZ] \d[AZ]\d$ 

Prueba esto:

 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][AZ])|(?!.*[DFIOQU])[A-VXY][0-9][AZ]\ ?[0-9][AZ][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; } 

No vale la pena validar el formato de un código postal sin validar su significado, ya que los errores tipográficos aún pueden dar como resultado un código postal válido para la dirección incorrecta. Desea validar el código con la base de datos de direcciones. Ver http://www.canadapost.ca/cpo/mc/business/productsservices/atoz/postalcodeproducts.jsf

 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();