我正在尝试将用户输入的一串数字转换为iPhone上的Phone.app等性感字符串。这是我正在使用的代码,它不起作用(没有特殊的格式出现),在一定数量的数字后,它只是开始在字符串的末尾添加“0”。
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]]];
答案 0 :(得分:11)
我认为您的问题是NSNumberFormatter
不支持括号,空格或短划线。我尝试实现与您相同的方法,但它无声地失败,只输出未格式化的文本。
这里的一般问题是iPhone SDK没有提供一种以区域设置依赖方式格式化电话号码的方法。
我已经向Apple提出了以下错误(其中两个是已知问题的重复,因此我已经包含了Apple的原始错误#):
#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
在理想的世界中,Apple会提供NSPhoneNumberFormatter
,您可以在setFormatter
上致电UIControl
,以便以漂亮的方式显示text
。不幸的是,iPhone上不存在。
答案 1 :(得分:9)
UIPhoneFormats.plist包含每种语言环境的预定义电话格式。因此,如果您只对美国电话号码感兴趣,则需要考虑以下格式:
+1(###)### - ####
1(###)### - ####
011 $
### - ####
(###)### - ####
我必须做类似的事情,我分享了我在这里得到的结果: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html
答案 2 :(得分:2)
一个电话号码应该是10个字符(11个前导1),所以你应该先改变这个:
[formatter setPositiveFormat:@"+# (###) ###-####"];
说到领先的1,你也需要检查它。
答案 3 :(得分:2)
Apple表示如果现有格式化程序的功能不够,您可以实现自定义格式化程序:
NSFormatter用于子类化。自定义格式化程序可以以新颖的方式限制输入并增强数据显示。例如,您可以使用自定义格式化程序,以确保用户输入的序列号符合预定义格式。在决定创建自定义格式化程序之前,请确保不能配置公共子类NSDateFormatter和NSNumberFormatter以满足您的要求。
有关如何创建自定义格式化程序的说明,请参阅创建自定义格式化程序。
答案 4 :(得分:0)
这里没有提到的一件事是NSNumberFormatter总是将值转换为NSNumber。 如果要使用更通用的NSFormatter,请子类化NSFormatter并实现创建自定义格式化程序中提到的方法。