iOS 7联系人号码空格不是空格[重复]
Posted
技术标签:
【中文标题】iOS 7联系人号码空格不是空格[重复]【英文标题】:iOS 7 contact number spaces are not spaces [duplicate] 【发布时间】:2013-11-02 16:06:48 【问题描述】:在我的应用程序中,我正在尝试检索联系人号码列表并尝试对其进行操作。我意识到,每当我添加新联系人(更新到 ios 7 后)时,新联系人的格式都会发生变化,因为新添加的数字中有空格。
使用普通替换方法不会删除空格。
这些真的是空间还是这些是什么?我的目标是取回“空间”免费号码。
比如号码是1 818 323 323 323
,我想得到1818323323323
【问题讨论】:
什么是“普通替换方法”? @mrueg 可能是标准的 NSString stringByReplacing* 方法 【参考方案1】:我认为这并没有摆脱“空格”,而是留下了只有个十进制字符。这段代码为我做到了:
phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
这会删除不是数字 0-9 的所有内容。
Swift 4.1:
phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
【讨论】:
太棒了,这对我有用,但是如果您有兴趣保留加号,这将删除数字中的 +,您需要对其应用一些逻辑。 太棒了!这就像一个魅力。非常感谢你:D【参考方案2】:试试这个:
NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];
这应该适用于任何类型的空间 (of which there are many)。可能看起来有些低效,但对于电话号码,这应该没问题。
【讨论】:
在尝试替换 @" " @" "(alt-space) 和 @"\u00a0" 后,我几乎可以肯定这种方法会起作用,但这种方法对我不起作用 为我解决了与通讯簿电话号码有关的 \U00a0 问题 要让它在我的 Localizable.strings 文件中工作,我必须使用全部大写:\U00A0
【参考方案3】:
某些 iOS7 电话号码使用不间断空格进行编码。试试这个:
NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
【讨论】:
对我不起作用:[【参考方案4】:经过太多的字符串清理,我在直接从通讯簿打印 CFStringRef 后终于找到了答案。以下是幕后发生的事情...
-
在 iOS7 中添加联系人,Apple 将其存储为:(555).555-5555(其中 . 实际上是 U00A0 或  )
我的应用程序从 AddressBook 复制联系人信息到 CFStringRef 中(当 NSLogged 显示 . 时)
CFStringRef 被转换为 NSString(NSLog 现在显示 555\U00a0555-5555)
要删除 \U00A0 我尝试了 3 个来自该线程的答案和 [NSCharacterSet characterSetWithRange:(160,1)] 没有工作。最终起作用的是这行代码:
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""];
// 其中@"."是通过键入 Option+空格键创建的
【讨论】:
这种方式不适合我【参考方案5】:另一个(非常灵活的)选项是使用正则表达式。这允许您保留 + 或您想要保留的任何其他字符。
let numberFromAddressBook = "+1 818 323 323 323"
let cleanNumber = numberFromAddressBook.stringByReplacingOccurrencesOfString("[^0-9+]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil)
"+1818323323323"
【讨论】:
【参考方案6】:我在应用中使用的最简洁的解决方案是:
NSMutableCharacterSet *phoneNubmerCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"+"];
[phoneNubmerCharacterSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
NSString* phoneString = [[phoneString componentsSeparatedByCharactersInSet:[phoneNubmerCharacterSet invertedSet]] componentsJoinedByString:@""];
没有“if”逻辑,保持+号,删除所有类型的随机不需要的字符
【讨论】:
这非常有效,因为可能有很多不需要的字符,如 \u0000 等。【参考方案7】:我对发帖人的回答做了一个小的调整,以防有人想在数字的开头保留 +。
如果你想在删除空格后保留加号,我做了这个小调整。
Boolean shouldAddPlus = NO;
if([[phoneNumber substringToIndex:1] isEqualToString:@"+"])
shouldAddPlus = YES;
phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
if(shouldAddPlus)
phoneNumber = [base stringByAppendingString:phoneNumber];
【讨论】:
【参考方案8】:正确的解决办法是用有效的空格替换出现的地方
NSString *clean = [dirty stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "];
这样您就不会失去空间,并且用户可以看到其他应用程序中看到的内容。
【讨论】:
以上是关于iOS 7联系人号码空格不是空格[重复]的主要内容,如果未能解决你的问题,请参考以下文章