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

ton*_*099 11 ios ios6 ios7

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

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

这些真的是空间还是这些?我的目标是找回'空间'免费号码.

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

Fen*_*ski 19

我看着这个并没有摆脱'空间',留下十进制字符.这段代码为我做了这个:

phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)

这取出了所有不是0-9的数字.

Swift 4.1:

phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
Run Code Online (Sandbox Code Playgroud)


mru*_*ueg 8

试试这个:

NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)

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


xpa*_*001 7

一些iOS7电话号码采用不间断空间进行编码.试试这个:

        NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
Run Code Online (Sandbox Code Playgroud)


sel*_*ame 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:@""];
Run Code Online (Sandbox Code Playgroud)

//其中@"​​." 是通过键入Option + Spacebar创建的


Kei*_*rey 5

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

let numberFromAddressBook = "+1 818 323 323 323"

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

"+1818323323323"
Run Code Online (Sandbox Code Playgroud)