Canadian postal code regex?
在邮政编码字段中,只有以下格式应该是有效的。
B1C 2B3 或 B1C3D3
如何为此编写正则表达式?
编辑:
1 | ^([a-zA-Z]\\d[a-zA-z]( )?\\d[a-zA-Z]\\d)$ |
这是我的正则表达式,但它只接受 B1C C1B(注意中间有空格)格式。即使没有空间也应该是有效的
您希望根据地址数据库验证邮政编码。并非
1 2 3 | Z0Z0Z0 Z9Z9Z9 Y7Y7Y7 |
关于初步检查,最简单的可能是通过 VB.NET 代码对值进行预处理。您需要删除空格并转换为大写。那么你的正则表达式非常简单:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
这里有一些真正的不一致之处。您提供的正则表达式
为了雪上加霜,您提供的正则表达式使用正确的加拿大格式。所以没有任何真正的理由来改变它。我的意思是,我会把它改成这个
但是,就使用而言,它可以像这样在 C# 中使用:
1 2 3 4 | 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:
1 2 3 4 | 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 | ^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$ |