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

时间:2011-04-13 19:35:32

标签: .net regex geonames

问候,

我正在使用Geonames数据库的本地副本,包括country-info数据。我的自定义.NET应用程序需要验证用户输入的邮政编码。验证需要在本地完成,不能使用可用的Geonames Web服务。这是我的申请要求。我希望你能帮助我弄清楚如何做到这一点。

在Geonames Country Info数据库的内部,有一个字段,其中包含用于验证相应国家/地区的Country / Zip代码的正则表达式。以下是加拿大和美国数据中包含的正则表达式:

Geonames数据库中的正则表达式:

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

测试总是失败。知道为什么吗? Geonames数据库是否使用与.NET Regex.Match()函数不同的“正则表达式语法”?关于如何从这里开始的任何建议?

我需要验证所有国家/地区的邮政/邮政编码 - 不仅仅是加拿大和美国,所以我真的希望能充分利用Geonames数据库中现有的丰富内容!

感谢您的所有帮助!

MomentSurfer

1 个答案:

答案 0 :(得分:3)

也许这只是一个格式化问题,但你的正则表达式中缺少反斜杠:

Canada: ^([a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d)$
USA: ^(\d{9})$

当然,它们可能与您的实际数据不匹配。例如,美国版仅匹配123456789完全 9位数)但不是1234512345-6789的邮政编码。加拿大版本同样不允许角色之间有任何分隔符。

相关问题