为了账号安全,请及时绑定邮箱和手机立即绑定

从NSString中删除所有数字

/ 猿问

从NSString中删除所有数字

饮歌长啸 2019-07-25 19:58:45

从NSString中删除所有数字

我有一个带有一些括号和连字符的NSString(电话号码),因为某些电话号码已格式化。如何从字符串中删除除数字之外的所有字符?



查看完整描述

3 回答

?
明月笑刀无情

老问题,但怎么样:

  NSString *newString = [[origString componentsSeparatedByCharactersInSet:
                [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
                componentsJoinedByString:@""];

它会爆炸非数字集上的源字符串,然后使用空字符串分隔符重新组合它们。不如通过字符选择那么高效,但在代码中更紧凑。


查看完整回答
反对 回复 2019-07-25
?
撒科打诨


没有必要使用正则表达式库,因为其他答案建议 - 你所追求的类被调用NSScanner。它的用法如下:


NSString *originalString = @"(123) 123123 abc";

NSMutableString *strippedString = [NSMutableString 

        stringWithCapacity:originalString.length];


NSScanner *scanner = [NSScanner scannerWithString:originalString];

NSCharacterSet *numbers = [NSCharacterSet 

        characterSetWithCharactersInString:@"0123456789"];


while ([scanner isAtEnd] == NO) {

  NSString *buffer;

  if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {

    [strippedString appendString:buffer];


  } else {

    [scanner setScanLocation:([scanner scanLocation] + 1)];

  }

}


NSLog(@"%@", strippedString); // "123123123"

编辑:我已经更新了代码,因为原件是我的头顶写的,我认为这足以指出人们正确的方向。似乎人们在代码之后可以直接复制粘贴到他们的应用程序中。


我也同意Michael Pelz-Sherman的解决方案比使用更合适NSScanner,所以你可能想看一下。


查看完整回答
反对 回复 2019-07-25
?
智慧大石

接受的答案对于所要求的内容来说是过度的。这更简单:

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



查看完整回答
反对 回复 2019-07-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信