郵便番号フィールドでは、次の形式のみが有効である必要があります。
B1C 2B3 または B1C3D3
このための正規表現の書き方は?
編集:
^([a-zA-Z]\d[a-zA-z]( )?\d[a-zA-Z]\d)$
これは私の正規表現ですが、B1C C1B (間のスペースに注意してください) 形式のみを受け入れます。スペースがなくても有効なはずです
ここにはいくつかの実際の矛盾があります。あなたが提供した正規^([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
住所データベースに対して郵便番号を検証する必要があります。形式内のすべての郵便番号が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