1

郵便番号フィールドでは、次の形式のみが有効である必要があります。

B1C 2B3 または B1C3D3

このための正規表現の書き方は?

編集:

^([a-zA-Z]\d[a-zA-z]( )?\d[a-zA-Z]\d)$

これは私の正規表現ですが、B1C C1B (間のスペースに注意してください) 形式のみを受け入れます。スペースがなくても有効なはずです

4

3 に答える 3

4

ここにはいくつかの実際の矛盾があります。あなたが提供した正規^([a-zA-Z]\d[a-zA-z]( )?\d[a-zA-Z]\d)$表現は、正しいカナダの形式に関してスコットが述べたものと一致します。ただし、提供した例は形式に従っていませんB1C C1B or B1CC1B

けがをするために、あなたが提供した正規表現は適切なカナダの形式で動作します。したがって、それを変更する本当の理由はありません。つまり、単一のスペースがグループ化されないようにこれに変更しますが、それ^([a-zA-Z]\d[a-zA-Z]\s?\d[a-zA-Z]\d)$は私だけです。

ただし、それを使用する限り、次のように C# で使用できます。

var matches = Regex.Match(inputString, @"^([a-zA-Z]\d[a-zA-Z]( )?\d[a-zA-Z]\d)$");
if (!matches.Success) {
    // do something because it didn't match
}

VB.NET でタグ付けされたので、次のようになります。

Dim matches = Regex.Match(inputString, "^([a-zA-Z]\d[a-zA-Z]( )?\d[a-zA-Z]\d)$")
If Not matches.Success Then
    ' do something because it didn't match
End If
于 2013-05-17T17:21:47.807 に答える
4

住所データベースに対して郵便番号を検証する必要があります。形式内のすべての郵便番号がA0A0A0有効なカナダの郵便番号であるとは限りません。存在しない郵便番号の例:

Z0Z0Z0
Z9Z9Z9
Y7Y7Y7

事前チェックに関しては、VB.NET コードで値を前処理するのが最も簡単でしょう。スペースを削除して大文字に変換する必要があります。次に、正規表現は非常に単純です: ([A-Z]\d){3}. テスト用の完全なコードは次のとおりです。

Imports System.Text.RegularExpressions

Module Module1
  Sub Main()
    Console.WriteLine(CanBeValidCanadianPostalCode("B1C 2B3")) 'prints True
    Console.WriteLine(CanBeValidCanadianPostalCode("B1C3D3")) 'prints True
  End Sub

  Private Function CanBeValidCanadianPostalCode(postal_code As String) As Boolean
    Return Regex.IsMatch(postal_code.Replace(" ", "").ToUpper, "([A-Z]\d){3}")
  End Function
End Module
于 2013-05-17T18:39:22.777 に答える