iOS:有效的邮政编码检查

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

附加信息:我知道在iOS的RegEx。 不过,我并不那么stream利。 请记住,这应该接受在任何国家有效的任何真实的。

例子

美国 – “10200”

美国 – “33701-4313”

加拿大 – “K8N 5W6”

英国 – “3252-322”

等等

编辑:那些投下来或结束这个问题,请提到为什么。 谢谢。

^[ABCEGHJKLMNPRSTVXY]\d[AZ][- ]*\d[AZ]\d$

匹配具有或不具有空格的加拿大PostalCode格式(例如,“T2X 1V4”或“T2X1V4”)


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

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


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

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


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

我build议你不要这样做。 我见过很多试图强制使用邮政编码的网站,但是我从来没有见过这样做。 甚至邮政编码都是美国特有的。

换一种说法:

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

我原本是要写[zip length] > 0 ,但当然,即使这是不能保证。

每个使用邮政编码/邮政编码的国家通常都有自己的格式。 你将很难find一个符合任何全球代码的正则expression式!

你最好添加一个国家select器来决定用来validation邮政编码的正则expression式(如果有的话)。

另外,作为英国例子的邮政编码是不正确的。 一个体面的英国正则expression式是:

 ^(^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}$)$