#.net #regex #geonames
#.net #регулярное выражение #geonames
Вопрос:
Приветствую,
Я использую локальную копию базы данных Geonames, включая данные country-info. Мой обычай.Сетевому приложению необходимо проверить почтовые индексы, которые вводят пользователи. Проверка должна выполняться локально и не может использовать доступные веб-службы 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:
Возможно, это просто проблема с форматированием, но в ваших регулярных выражениях отсутствуют обратные косые черты:
Canada: ^([a-zA-Z]d[a-zA-Z]d[a-zA-Z]d)$
USA: ^(d{9})$
И, конечно, они могут не соответствовать вашим фактическим данным. Например, версия для США соответствует только почтовым кодам типа 123456789
(ровно 9 цифр), но не 12345
или 12345-6789
. И версия для Канады также не допускает никаких разделителей между символами.