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

时间:2013-11-02 16:06:49

标签: ios ios6 ios7

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

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

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

例如,如果数字为1 818 323 323 323,我想获得1818323323323

8 个答案:

答案 0 :(得分:19)

我认为这并没有摆脱'空间',而只剩下 十进制字符。这段代码为我做了这个:

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

这会取出一切,而不是数字0-9。

Swift 4.1:

phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")

答案 1 :(得分:8)

试试这个:

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

这适用于任何类型的空间(of which there are many)。这似乎有点低效,但对于电话号码,这应该没问题。

答案 2 :(得分:7)

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

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

答案 3 :(得分:5)

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

  1. 在iOS7和Apple中添加联系人存储:(555).555-5555(其中。实际上是U00A0或& nbsp)
  2. 我的应用从地址簿复制CFStringRef中的联系人信息(当NSLogged显示时)
  3. CFStringRef被强制转换为NSString(NSLog现在显示为555 \ U00a0555-5555)
  4. 要删除\ U00A0,我尝试了3个来自此线程的答案和[NSCharacterSet characterSetWithRange:(160,1)],这些都没有用。最终有效的是这行代码:

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

    //其中@“​​。”是通过键入Option + Spacebar

    创建的

答案 4 :(得分:5)

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

function updateChart(){
x.domain([0, d3.max(data, function(d) { return d.count; })]);
chart = d3.select('.chart');

bar = chart.selectAll('g')
        .data(data);

// Enter…
bar.enter().append('g')
    .attr('transform', function(d, i) { return 'translate(0,' + (i * (barHeight+barMargin)) + ')'; });

bar.append('rect')
    .attr("x", labelW)
    .attr("height", barHeight)
    .attr('width', 0)
    .transition()
    .duration(500)
    .attr('width', function(d) { return x(d.count); });

// Update…
bar.transition()
    .duration(500)
    .attr('width', function(d) { return x(d.count); });

// Exit…
bar.exit()
    .remove();
}

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:2)

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

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

 Boolean shouldAddPlus = NO;

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

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

 if(shouldAddPlus)
    phoneNumber = [base stringByAppendingString:phoneNumber];

答案 7 :(得分:1)

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

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

因此,您不会松开空间,用户会看到其他应用中看到的内容。