加拿大邮政编码正则表达式?

时间:2013-05-17 17:16:57

标签: .net regex vb.net

在邮政编码字段中,只有以下格式有效。

B1C 2B3或B1C3D3

如何为此编写正则表达式?

编辑:

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

这是我的正则表达式,但它只接受B1C C1B(中间的通知空间)格式。即使有空间也应该有效

3 个答案:

答案 0 :(得分:4)

这里有一些真正的不一致。您提供的正则表达式^([a-zA-Z]\d[a-zA-z]( )?\d[a-zA-Z]\d)$符合Scott关于正确加拿大格式的说明。但是,您提供的示例不遵循格式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

答案 1 :(得分:4)

您想要针对the address database验证邮政编码。并非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

答案 2 :(得分:2)

使用以下正则表达式进行加拿大邮政编码验证

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$