问题:如何编写一个函数来检查并返回字符串(NSString)是否包含全球有效的邮政编码。
附加信息:我知道 iOS 中的 RegEx。但是我不是很流利。请记住,这应该接受在任何国家/地区有效的任何内容。
例子
美国 - “10200”
美国 - “33701-4313”
加拿大 - “K8N 5W6”
英国 - “3252-322”
等等
编辑:那些投票否决或关闭问题的人,请务必说明原因。谢谢你。
^[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
我建议你不要这样做。我见过许多网站试图强制执行邮政编码,但我从未见过一个做得对的。甚至名称邮政编码也是美国特有的。
换句话说:
- (BOOL)isValidZipCode: (NSString *)zip {
return YES;
}
我本来打算写[zip length] > 0
的,但当然即使这样也不能保证。
每个使用邮政编码/邮政编码的国家通常都有自己的格式。您将很难找到匹配任何全球代码的正则表达式!
您最好添加一个国家/地区选择器来确定用于验证邮政编码的正则表达式(如果有)。
顺便说一句,您作为英国示例提供的邮政编码不正确。一个体面的英国正则表达式是:
^(^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}$)$