如何使用.NET Regex.Match来验证地名国家信息数据库中的邮政编码正则表达式

问题描述

| 问候, 我正在使用地理名称数据库的本地副本,包括国家/地区信息数据。我的自定义.NET应用程序需要验证用户输入的邮政编码。验证需要在本地完成,并且不能使用可用的Geonames Web服务。这是我的应用程序的要求。我希望您能帮助我找出解决方法。 在“地名国家/地区信息”数据库中,存在一个包含正则表达式的字段,用于验证相应国家/地区的国家/邮政编码。以下是加拿大和美国的数据中包含的正则表达式: 地名数据库中的正则表达式:
Canada: ^([a-zA-Z]d[a-zA-Z]d[a-zA-Z]d)$
USA: ^(d{9})$
在我的应用程序中,完成验证后,我首先确定所选国家/地区,然后查找特定国家/地区的有效邮政编码正则表达式。然后,我使用以下.NET / C#代码测试匹配项:
bool testResult = Regex.IsMatch(postalCode,geonamesRegexForCountry);
当我输入邮政编码的有效样本数据时,正则表达式匹配测试始终失败。以下是一些有效值:
Canada:
   Postal Code: L5R3K6
   Postal Code: L8M1L5

USA:
   Zip Code: 35801
   Zip Code: 72201
测试总是失败。知道为什么吗?地名数据库与.NETular3ѭ函数使用的\“正则表达式语法\”是否不同?关于如何从这里继续进行的任何建议? 我需要验证所有国家/地区的邮政编码,而不仅仅是加拿大和美国,因此我真的希望我可以利用Geonames数据库中现有的大量内容! 感谢您所有的帮助! 瞬间冲浪     

解决方法

也许这只是一个格式问题,但是正则表达式中缺少反斜杠:
Canada: ^([a-zA-Z]\\d[a-zA-Z]\\d[a-zA-Z]\\d)$
USA: ^(\\d{9})$
而且,当然,它们可能与您的实际数据不匹配。例如,美国版本仅匹配
123456789
(精确为9位数字)之类的邮政编码,而不匹配
12345
12345-6789
。加拿大版本同样不允许在字符之间使用任何分隔符。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...