关于.net:加拿大邮政编码正则表达式? | 珊瑚贝

Canadian postal code regex?


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

B1C 2B3 或 B1C3D3

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

编辑:

1
^([azAZ]\\d[azAz]( )?\\d[azAZ]\\d)$

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

  • 你尝试了什么?你有什么问题?
  • 这是 C# 而不是 VB.NET,但我希望它可以翻译:stackoverflow.com/questions/1146202/
  • 如果这些是您期望的仅有的三个值,那么 B1C|C1B|B1CC1B 正则表达式有什么问题?
  • @SLaks : “^([a-zA-Z]\\\\\\\\d[a-zA-z]( )?\\\\\\\\d[a-zA-Z]\\\\\\\\d)$”这是我的正则表达式,但它只接受 B1C C1B(注意之间的空格)格式。即使没有空间也应该是有效的
  • 我不认为你想要空间周围的括号。
  • 那些不是有效的加拿大邮政编码。格式为A0A 0A0,其中A 代表字母,0 代表数字。
  • @VadimK 他的正则表达式是正确的,但不是他的例子


您希望根据地址数据库验证邮政编码。并非 A0A0A0 格式的每个邮政编码都是有效的加拿大邮政编码。不存在的邮政编码示例:

1
2
3
Z0Z0Z0
Z9Z9Z9
Y7Y7Y7

关于初步检查,最简单的可能是通过 VB.NET 代码对值进行预处理。您需要删除空格并转换为大写。那么你的正则表达式非常简单:([A-Z]\\d){3}。这是测试的完整代码:

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


这里有一些真正的不一致之处。您提供的正则表达式 ^([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# 中使用:

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
  • 实际上正则表达式是 [A-Z][0-9][A-Z] ?[0-9][A-Z][0-9] AAA AAA 不是有效的加拿大邮政编码。 B1C\\t0A2 也不是(操作的原始示例也是错误的)
  • @ScottChamberlain,我很抱歉,我会采用 OP 当前的正则表达式并修复它。
  • @ScottChamberlain,我修复了它,但是 OPs 问题存在一些真正的不一致之处。
  • 这可以用不区分大小写的标志来缩短,然后 a-zA-Z 可以是 A-Z


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

1
^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[AZ]{1} *\\d{1}[AZ]{1}\\d{1}$
  • 这是正确的答案。


来源:https://www.codenong.com/16614648/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9830.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?