Вопрос

Question: How would one write a function to check and return whether or not a string (NSString) contains a valid zip code worldwide.

Additional info: I am aware of RegEx in iOS. However I am not so fluent at it. Please keep in mind this should accepts anything valid in any country as true.

Examples

US - "10200"

US - "33701-4313"

Canada - "K8N 5W6"

UK - "3252-322"

etc.

Edit: Those who voted down or to close the question, please do mention why. Thank you.

Это было полезно?

Решение

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

Matches Canadian PostalCode formats with or without spaces (e.g., "T2X 1V4" or "T2X1V4")


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

Matches all US format ZIP code formats (e.g., "94105-0011" or "94105")


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

Matches US or Canadian codes in above formats.


UK codes are more complicated than you think: http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom

Другие советы

I suggest you don't do this. I've seen many websites that try to enforce zipcodes, but I've never seen one get it right. Even the name zipcode is specific to the US.

In other words:

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

I was originally going to write [zip length] > 0, but of course even that isn't guaranteed.

Each country that uses postcodes/zip codes usually has their own format. You are going to be hard-pressed to find a regular expression that matches any worldwide code!

You're better off adding a country picker that determines the regular expression (if any) to be used to validate the zip code.

As an aside, the postcode you have given as a UK example is not correct. A decent UK regex is:

^(^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}$)$
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top