11

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

使用普通替换方法不会删除空格。

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

例如,如果数字是1 818 323 323 323,我想得到1818323323323

4

8 回答 8

19

我认为这并没有摆脱“空格”,而是只剩十进制字符。这段代码为我做到了:

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

这去掉了所有不是数字 0-9 的东西。

斯威夫特 4.1:

phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
于 2014-04-08T21:25:19.650 回答
8

尝试这个:

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

这应该适用于任何类型的空间(其中有很多)。这似乎有些低效,但对于电话号码,这应该没问题。

于 2013-11-02T16:33:34.540 回答
7

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

        NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
于 2013-11-21T22:33:18.337 回答
5

经过太多的字符串清理后,我终于在直接从通讯簿打印 CFStringRef 后找到了答案。这是幕后发生的事情......

  1. 在 iOS7 中添加联系人,Apple 存储此:(555).555-5555(其中 . 实际上是 U00A0 或  )
  2. 我的应用程序从 AddressBook 的 CFStringRef 中复制联系人信息(当 NSLogged 显示 . 时)
  3. CFStringRef 被转换成 NSString(NSLog 现在显示 555\U00a0555-5555)

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

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

// 在哪里 @”。” 是通过键入 Option+空格键创建的

于 2013-12-12T00:02:28.220 回答
5

另一个(非常灵活的)选项是使用正则表达式。这允许您保留 + 或您想要保留的任何其他字符。

let numberFromAddressBook = "+1 818 323 323 323"

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

"+1818323323323"
于 2016-06-23T23:30:51.307 回答
3

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

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

没有“if”逻辑,保留 + 号,删除所有类型的随机不需要的字符

于 2015-05-25T18:22:49.097 回答
2

我对发帖人的回答做了一个小的调整,以防有人想在数字的开头保持 +。

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

 Boolean shouldAddPlus = NO;

 if([[phoneNumber substringToIndex:1] isEqualToString:@"+"])
    {
        shouldAddPlus = YES;
    }

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

 if(shouldAddPlus)
    phoneNumber = [base stringByAppendingString:phoneNumber];
于 2015-03-26T09:30:37.397 回答
1

正确的解决方案是用有效空格替换出现

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

所以你不会失去空间,用户会看到其他应用程序中看到的内容。

于 2016-02-09T16:19:09.323 回答