I’m trying to convert a string of numbers, entered by the user, into a sexy string like Phone.app on the iPhone. Here is the code I’m using, which doesn’t work (no special format comes out) and after a certain number of digits it just starts adding “0” to the end of the string.
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterNoStyle];
[formatter setPositiveFormat:@"+# (###) ###-###"];
[formatter setLenient:YES];
NSString *strDigits = [self stringByReplacingOccurrencesOfRegex:@"[^0-9+]" withString:@""];
return [formatter stringFromNumber:[NSNumber numberWithDouble:[strDigits doubleValue]]];
I think your issue is that
NSNumberFormatterdoes 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):
In an ideal world Apple would provide an
NSPhoneNumberFormatter, and you would callsetFormatteron yourUIControlso it displayedtextin a nice pretty way. Unfortunately that doesn’t exist on the iPhone.