Convalida del codice postale canadese

Devo convalidare un codice postale canadese (ad esempio, M4B 1C7 ) utilizzando espressioni regolari C # (.NET).

I codici postali canadesi non possono contenere le lettere D, F, I, O, Q o U e non possono iniziare con W o Z:

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

Se vuoi uno spazio opzionale nel mezzo:

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

Suggerisco il seguente:

 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 } 

Ecco le regole 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] 

Qualcosa come questo:

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

Prova questo:

 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; } 

Convalidare il formato di un codice postale senza convalidarne il significato non vale la pena, dal momento che gli errori di battitura possono ancora risultare in un codice postale valido per l’indirizzo sbagliato. Vuoi convalidare il codice contro il database degli indirizzi. Vedi 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();