NSNumberFormatter to format US Telephone Numbers

I think your issue is that NSNumberFormatter does not support brackets, spaces or dashes. I tried to implement the same method as you and it failed silently and just output unformatted text.

The general problem here is that the iPhone SDK doesn't provide a method to format phone numbers in a locale dependent way.

I have raised bugs with Apple for the following (two of these were duplicates of known issues so I've included Apple's original bug # for those):

#6933244 - Need iPhone SDK interface to format text as locale dependent phone number
#5847381 - UIControl does not support a setFormatter method
#6024985 - Overridden UITextField drawTextInRect method is never called

In an ideal world Apple would provide an NSPhoneNumberFormatter, and you would call setFormatter on your UIControl so it displayed text in a nice pretty way. Unfortunately that doesn't exist on the iPhone.


The UIPhoneFormats.plist contains predefined phone formats for each locale. So, if you're only interested in US phone numbers, you'll need to consider these formats:

+1 (###) ###-####
1 (###) ###-####
011 $
###-####
(###) ###-####

I had to do something similar, and I shared the results I got here: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html


Well a phone number should be 10 characters(11 with the leading 1), so you should start by changing this:

[formatter setPositiveFormat:@"+# (###) ###-####"];

And speaking of the leading 1, you need to check for that too.