iphone sdk - 从字符串中删除除数字0-9之外的所有字符

时间:2009-07-21 16:53:14

标签: iphone nsstring

好的,所以这是计划。我从中获取数据的XML允许电话号码字段中的非数字文本(用于描述或联系人姓名等)。我试图只提取数字并用它们调用tel:URL来发起呼叫。这是什么不工作:

NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSString *number = @"(555) 555-5555 Office";
NSString *strippedNumber = [number stringByTrimmingCharactersInSet:charset];
NSString *phoneURL = [NSString stringWithFormat:@"tel:%@", strippedNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneURL]];

如果有任何明显的拼写错误,它们只是错别字。 :)

3 个答案:

答案 0 :(得分:93)

仅使用iOS API更简单:

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

答案 1 :(得分:13)

您正在使用trim方法,这意味着它只查看字符串的外边缘。你可能得到类似的东西:“555)555-555”作为电话号码,对吗?

我不知道NS(Mutable)String方法沿着“replaceOccurrencesOfCharactersInSet:(NSCharacterSet *)set”,我承认,这可能真的很棒。

作为我,我可能只是使用正则表达式。如果您使用RegexKitLite,则可以轻松执行以下操作:

#import "RegexKitLite.h"

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfRegex:@"[^0-9]" withString:@""];

这可能有点矫枉过正,但它会完全符合您的要求。

仅供参考:“[^ 0-9]”表示“任何不是0,1,2,3,4,5,6,7,8或9的角色”。

答案 2 :(得分:12)

虽然已经回答/接受了,但我有一个更好的解决方案,无需外部SDK。在类似的类别中创建一个额外的NSString方法:

@interface NSString (Helpers)

- (NSString*)stringByRemovingCharactersInSet:(NSCharacterSet*)set;

@end

@implementation NSString (Helpers)

- (NSString*)stringByRemovingCharactersInSet:(NSCharacterSet*)set
{
    NSArray* components = [self componentsSeparatedByCharactersInSet:set];
    return [components componentsJoinedByString:@""];
}

@end

现在您可以使用stringByRemovingCharactersInSet而不是stringByTrimmingCharactersInSet。不过,我还建议您对示例代码稍作修改,以支持国际号码中的“+”字符,如下所示:

NSString* number = @"(555) 555-555 Office";
NSCharacterSet* phoneChars = [NSCharacterSet characterSetWithCharactersInString:@"+0123456789"];
NSString* strippedNumber = [number stringByRemovingCharactersInSet:[phoneChars invertedSet]];
NSString* urlString = [NSString stringWithFormat:@"tel:%@", strippedNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];