在邮政编码字段中,只有以下格式应该是有效的。
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)$
与 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
您想根据地址数据库验证邮政编码。并非格式中的每个邮政编码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
使用以下正则表达式进行加拿大邮政编码验证
^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$