Как использовать .NET Regex.Match для проверки правильности регулярных выражений почтового / почтового индекса в базе данных Geonames - PullRequest
1 голос
/ 13 апреля 2011

Привет,

Я использую локальную копию базы данных Geonames, включая данные о стране.Мое пользовательское приложение .NET должно проверять почтовые / почтовые индексы, которые вводят пользователи.Проверка должна быть выполнена локально и не может использовать доступные веб-сервисы Geonames.Это требование моего приложения.Я надеюсь, что вы можете помочь мне понять, как это сделать.

Внутри базы данных Geonames Country Info есть поле, которое содержит регулярное выражение для проверки кода страны / почтового индекса для соответствующей страны.Вот регулярные выражения, которые содержатся в данных как для Канады, так и для США:

регулярных выражений в базе данных 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 Ответ

3 голосов
/ 13 апреля 2011

Возможно, это просто проблема форматирования, но в ваших регулярных выражениях отсутствуют обратные слэши:

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

И, конечно, они могут не соответствовать вашим фактическим данным.Например, версия для США соответствует только почтовым индексам, таким как 123456789 ( точно 9 цифр), но не 12345 или 12345-6789.И канадская версия также не допускает никаких разделителей между символами.

...