问题:如何编写一个函数来检查并返回一个字符串(NSString)是否在全球范围内包含有效的邮政编码。
其他信息:我知道iOS中的RegEx。但是我不是那么流利。请记住,这应该接受在任何国家/地区都有效的任何内容。
示例
美国 - “10200”
美国 - “33701-4313”
加拿大 - “K8N 5W6”
英国 - “3252-322”
等
编辑:投票或关闭此问题的人请提及原因。谢谢。
答案 0 :(得分:7)
^[ABCEGHJKLMNPRSTVXY]\d[A-Z][- ]*\d[A-Z]\d$
使用或不使用空格匹配Canadian PostalCode格式(例如,“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
答案 1 :(得分:3)
我建议你不要这样做。我见过很多试图强制执行zipcodes的网站,但我从来没有见过一个正确的。甚至名称 zipcode 也是特定于美国的。
换句话说:
- (BOOL)isValidZipCode: (NSString *)zip {
return YES;
}
我原本打算写[zip length] > 0
,但当然即使这样也不能保证。
答案 2 :(得分: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}$)$