1

ご挨拶、

国情報データを含む Geonames データベースのローカル コピーを使用しています。カスタム .NET アプリケーションは、ユーザーが入力した郵便番号を検証する必要があります。検証はローカルで行う必要があり、利用可能な Geonames Web サービスは使用できません。これは私のアプリケーションの要件です。これを行う方法を理解するのを手伝ってくれることを願っています。

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 データベースは、.NETRegex.Match()関数が使用するものとは異なる「正規表現構文」を使用しますか? ここから先に進む方法について何か提案はありますか?

カナダと米国だけでなく、すべての国の郵便番号を検証する必要があるため、Geonames データベースに存在する豊富なコンテンツを活用できることを本当に望んでいます!

ご協力いただきありがとうございます。

モーメントサーファー

4

1 に答える 1

3

おそらくそれは単なるフォーマットの問題ですが、正規表現にバックスラッシュがありません。

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

そしてもちろん、それらは実際のデータと一致しない可能性があります。たとえば、USAバージョンは、123456789正確に9桁の)のような郵便番号にのみ一致しますが、12345またはには一致しません12345-6789。また、カナダ版でも同様に、文字間の区切り文字は使用できません。

于 2011-04-13T19:42:04.673 に答える