2011-04-13 3 views
1

인사,GeoNames을 국가 소개 데이터베이스에

나는 국가 정보 데이터를 포함하여 GeoNames을 데이터베이스의 로컬 복사본을 사용하고 있습니다를 우편/우편 번호 정규 표현식의 유효성을 검사하는 .NET Regex.Match를 사용하는 방법. 내 사용자 지정 .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

답변

3

아마도 그것은 단지 형식의 문제입니다,하지만 정규 표현식에 누락 백 슬래시가 있습니다 :

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

그리고 물론, 그들이 일치되지 않을 수 있습니다 실제 데이터가. 예를 들어, 미국 버전은 123456789 (정확히 9 자리)과 같은 우편 번호 만 일치하지만 12345 또는 12345-6789은 일치하지 않습니다. 그리고 캐나다 버전은 마찬가지로 문자 사이에 구분자를 허용하지 않습니다.

+0

친절하게 도와 주셔서 감사합니다. 정말 감사! – MomentSurfer