2

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

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

例子

美国 - “10200”

美国 - “33701-4313”

加拿大 - “K8N 5W6”

英国 - “3252-322”

等等

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

4

3 回答 3

7

^[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

于 2012-06-27T16:07:45.067 回答
3

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

换句话说:

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

我本来打算写[zip length] > 0的,但当然即使这样也不能保证。

于 2012-06-27T16:22:27.080 回答
2

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

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

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

^(^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}$)$
于 2012-06-27T16:16:23.177 回答