删除iOS中不需要的字符

时间:2013-11-19 03:06:06

标签: ios iphone

我正在填写地址簿中的所有联系人。我必须向服务器发送没有国家代码和电话号码的电话号码。没有任何特殊字符和空间.i.e。纯电话号码。但是我的地址簿电话号码有不同的格式,比如这些

"+91 99-70-044099",
"*125#",
"+91 8605-681220",
"+919975806164",
9822771881,
02026697467,
"+**62*+91675#",
"+91 80-87177718",
"\U202a+91 81 49 753637\U202c",
"8308-412345",
"094-19-241898",
"*123*7#",
"+6596913434",
7898989876565657  

制作没有特殊字符的&空格,我做了以下代码

NSError *error;
            NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                                       error:&error];
            NSUInteger phoneValidates = [detector numberOfMatchesInString:phoneNumber
                                                                  options:0
                                                                    range:NSMakeRange(0, [phoneNumber length])];
          //  NSLog(@"res=%d",phoneValidates);

            if (phoneValidates)
            {

                NSLog(@"yes it is phone number %@",phoneNumber);
                NSString *str = [phoneNumber stringByReplacingOccurrencesOfString:@"+" withString:@"" ];
                NSLog(@"after=%@",str);
                str = [str stringByReplacingOccurrencesOfString:@" " withString:@"" ];
                NSLog(@"after=%@",str);
                str = [str stringByReplacingOccurrencesOfString:@"-" withString:@"" ];
                NSLog(@"after=%@",str);
                str = [str stringByReplacingOccurrencesOfString:@"\\U202a" withString:@"" ];
                NSLog(@"after=%@",str);

                str = [str stringByReplacingOccurrencesOfString:@"\\U202c" withString:@"" ];
                NSLog(@"after=%@",str);

                [arr_contact addObject:str];
            }

即使经过上面的代码,数组也包含以下格式数字

"\U202a918149753637\U202c", 

如何删除这些字符?如何从中获得数字。
一些数字与国家代码,然后如何删除国家代码,我的问题是 91是我的国家代码,但我也有一些以91开头的号码,即实际号码,而不是国家代码。我还必须检查所有类型的国家代码。

4 个答案:

答案 0 :(得分:5)

NSString * strippedNumber =
 [mobileNumber stringByReplacingOccurrencesOfString:@"[^0-9]"
                                         withString:@""
                                            options:NSRegularExpressionSearch
                                              range:NSMakeRange(0, [mobileNumber length])];

答案 1 :(得分:4)

仅获取数字:

NSMutableString *result = [NSMutableString stringWithCapacity:phoneNumber.length];

NSScanner *scanner = [NSScanner scannerWithString:phoneNumber];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

while ([scanner isAtEnd] == NO) 
{
  NSString *buffer;
  if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) 
   {
      [result appendString:buffer];
   } 
   else 
   {
      [scanner setScanLocation:([scanner scanLocation] + 1)];
   }
}

NSLog(@"%@", result);

答案 2 :(得分:1)

\ U202a,\ U202b,\ U202c,\ U202d是控制字符。它们在NSCharacterSet中定义。所以这是从给定字符串中删除控制字符的一种方法..

NSCharacterSet *cc = [NSCharacterSet controlCharacterSet];
NSString *cs = [[searchString componentsSeparatedByCharactersInSet:cc]
                componentsJoinedByString:@""];

控制字符属于Cc和Cf类别。 http://www.fileformat.info/info/unicode/category/index.htm

答案 3 :(得分:0)

尝试使用以下代码:

我是这样做的:

NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];

我最终得到一个空字符串,但代码不会崩溃。

我不得不求助于老C:

 for (int i=0; i<[phoneNumber length]; i++) 
 {
     if (isdigit([phoneNumber characterAtIndex:i]))
     {
         [strippedString appendFormat:@"%c",[phoneNumber characterAtIndex:i]];
     }
 }