iOS 7联系号码空格不是空格

在我的应用程序,我试图检索联系人的号码列表,并尝试对他们进行操作。 我意识到,每当我添加新的联系人(在更新到iOS 7之后),新的联系人格式已经改变,因为在新添加的数字中有间距。

使用普通的replace方法不会删除空格。

这些真的是空间还是这些? 我的目标是找回“空间”的免费号码。

例如,如果号码是1 818 323 323 323 ,我想得到1818323323323

我认为这不是摆脱“空格”,而是留下只有十进制字符。 这段代码对我来说是这样做的:

 phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; 

这拿出所有不是0-9的数字。

尝试这个:

 NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 

这应该适用于任何types的空间( 其中有很多 )。 这似乎有点低效,但对于电话号码,这应该是好的。

一些iOS7的电话号码是用不间断的空格编码的。 尝试这个:

  NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""]; 

经过太多的string清理后,我终于从地址簿中直接打印CFStringRef后find答案。 这是幕后发生的事情…

  1. 在iOS7中添加一个联系人,Apple会将此存储为:(555).555-5555(其中。实际上是U00A0或&nbsp)
  2. 我的应用程序从联系人的地址簿(当NSLogged the。显示)CFStringRef复制联系人的信息
  3. CFStringRef被强制转换为NSString(NSLog现在显示为555 \ U00a0555-5555)

要删除\ U00A0我尝试了3个答案从这个线程和[NSCharacterSet characterSetWithRange:(160,1)]不起作用。 最后的工作是这行代码:

 phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""]; 

// where @“。” 是通过键入Option +空格键创build的

我在我的应用程序中使用的最干净的解决scheme是:

 NSMutableCharacterSet *phoneNubmerCharacterSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"+"]; [phoneNubmerCharacterSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]; NSString* phoneString = [[phoneString componentsSeparatedByCharactersInSet:[phoneNubmerCharacterSet invertedSet]] componentsJoinedByString:@""]; 

没有“如果”的逻辑,保持+的数量,删除所有types的随机不需要的字符

如果有人想在数字开始时保持+,我对招贴画的答案做了一个小调整。

如果你想在删除空格后保留加号,我做了这个小调整。

  Boolean shouldAddPlus = NO; if([[phoneNumber substringToIndex:1] isEqualToString:@"+"]) { shouldAddPlus = YES; } phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; if(shouldAddPlus) phoneNumber = [base stringByAppendingString:phoneNumber]; 

另一个(非常灵活的)选项是使用正则expression式。 这可以让你保留你想要保留的+或其他任何字符。

 let numberFromAddressBook = "+1 818 323 323 323" let cleanNumber = numberFromAddressBook.stringByReplacingOccurrencesOfString("[^0-9+]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil) "+1818323323323" 

正确的解决scheme是用有效的空间replace出现

 NSString *clean = [dirty stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "]; 

所以你不要松动空间,用户可以看到在其他应用程序中看到的东西。