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答案。 这是幕后发生的事情…
- 在iOS7中添加一个联系人,Apple会将此存储为:(555).555-5555(其中。实际上是U00A0或&nbsp)
- 我的应用程序从联系人的地址簿(当NSLogged the。显示)CFStringRef复制联系人的信息
- 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:@" "];
所以你不要松动空间,用户可以看到在其他应用程序中看到的东西。