【问题标题】:iOS: Valid zip code checkiOS:有效的邮政编码检查
【发布时间】:2012-06-27 16:00:05
【问题描述】:

问题:如何编写一个函数来检查并返回字符串 (NSString) 是否包含全球有效的邮政编码。

其他信息:我知道 iOS 中的 RegEx。但是我不是很流利。请记住,这应该接受在任何国家/地区有效的任何内容。

示例

美国 - “10200”

美国 - “33701-4313”

加拿大 - “K8N 5W6”

英国 - “3252-322”

等等

编辑:那些投票否决或关闭问题的人,请务必说明原因。谢谢。

【问题讨论】:

  • 我没有投反对票。但我想这是因为这个问题没有研究。重新阅读 StackOverflow 的常见问题解答,了解如何提出人们不会投票反对的问题。 :)

标签: iphone ios regex ipad zipcode


【解决方案1】:

^[ABCEGHJKLMNPRSTVXY]\d[A-Z][- ]*\d[A-Z]\d$

匹配带或不带空格的加拿大邮政编码格式(例如,“T2X 1V4”或“T2X1V4”)


^\d{5}(-\d{4})?$

匹配所有美国格式的邮政编码格式(例如,“94105-0011”或“94105”)


(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]\d[A-Z][- ]*\d[A-Z]\d$)

匹配上述格式的美国或加拿大代码。


英国代码比你想象的要复杂:http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom

【讨论】:

  • 加拿大邮政编码通常也用 - 书写,如 T2X-1V4。
  • 谢谢,确实很复杂。
  • 我想你想要 (|-):?用于加拿大邮政编码分隔符。这允许一个空格、破折号或什么都没有。
【解决方案2】:

我建议你不要这样做。我见过许多网站试图强制执行邮政编码,但我从未见过一个做得对的。就连 zipcode 这个名字也是美国特有的。

换句话说:

- (BOOL)isValidZipCode: (NSString *)zip {
    return YES;
}

我本来打算写[zip length] > 0,但当然不能保证。

【讨论】:

  • 我实际上放入了一个类似于你在这里写的东西的虚拟对象。可悲的是,这会造成太多误报。不过感谢您的尝试。
  • 祝你好运。我认为您尝试做的可能是可以实现的,只要您为每个国家/地区使用自定义正则表达式并花费必要的精力来测试每个国家/地区的算法。看来这是苹果应该做的事情。
【解决方案3】:

每个使用邮政编码/邮政编码的国家/地区通常都有自己的格式。您将很难找到匹配任何全球代码的正则表达式!

您最好添加一个国家/地区选择器来确定用于验证邮政编码的正则表达式(如果有)。

顺便说一句,您作为英国示例提供的邮政编码不正确。一个体面的英国正则表达式是:

^(^gir\\s0aa$)|(^[a-pr-uwyz]((\\d{1,2})|([a-hk-y]\\d{1,2})|(\\d[a-hjks-uw])|([a-hk-y]\\d[abehmnprv-y]))\\s\\d[abd-hjlnp-uw-z]{2}$)$

【讨论】:

  • 为什么您在邮政编码中使用小写字符...?
  • 正则表达式是为了验证邮政编码的内容,不一定是用户输入的格式(大写/小写)。在将正则表达式转换为小写字母后,我总是会针对用户的输入对其进行测试。如果您希望用户明确输入大写邮政编码,您可以修改正则表达式,或使用各种其他方法来强制执行它(UITextField 委托方法等)。归根结底,无论大小写如何,英国邮政编码都被认为是有效的。
  • 我看到你来自英国,我只是好奇,因为我在英国有家人,我一直在与英国公司做生意,但我从未见过小写的英国邮政编码。感谢分享...
  • 我当然可以理解这条评论,因为英国邮政编码几乎总是显示为大写,但从技术上讲,小写并不会使拒绝它无效。
  • 谢谢小写在我的情况下也有效。为您的时间 +1。
猜你喜欢
  • 1970-01-01
  • 2014-08-26
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多