草庐IT

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

codeneng 2023-03-28 原文

Canadian postal code regex?

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

B1C 2B3 或 B1C3D3

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

编辑:

1
^([a-zA-Z]\\d[a-zA-z]( )?\\d[a-zA-Z]\\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}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$

  • 这是正确的答案。

有关关于.net:加拿大邮政编码正则表达式?的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  5. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  6. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  7. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  8. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  9. ruby - 正则表达式将非英文字母匹配为非单词字符 - 2

    @raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://

  10. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

随机推荐