在我的应用程序中,我正在尝试检索联系人号码列表并尝试对其进行操作。我意识到每当我添加新联系人(更新到iOS 7之后)后,新的联系人格式都会发生变化,因为新添加的数字会有间距。
使用普通的替换方法不会删除空格。
这些真的是空间还是这些?我的目标是取回'空间'免费号码。
例如,如果数字为1 818 323 323 323
,我想获得1818323323323
答案 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后找到了答案。这是幕后发生的事情......
要删除\ 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:@" "];
因此,您不会松开空间,用户会看到其他应用中看到的内容。