加拿大邮政编码validation

我需要使用C#(.NET)正则expression式validation加拿大邮政编码(例如, M4B 1C7 )。

加拿大邮政编码不能包含字母D,F,I,O,Q或U,不能以W或Z开头:

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

如果你想要一个可选的空间在中间:

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

我build议如下:

 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 } 

这里是规则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] 

像这样的东西:

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

validation邮政编码的格式而不validation其含义是不值得的,因为拼写错误仍然可能导致错误地址的有效邮政编码。 你想要validation地址数据库的代码。 见http://www.canadapost.ca/cpo/mc/business/productsservices/atoz/postalcodeproducts.jsf

尝试这个:

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