16

好的,这是计划。我从中获取数据的 XML 允许在电话号码字段中使用非数字文本(用于描述或联系人姓名等)。我正在尝试仅提取数字并与他们一起拨打电话: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]];

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

4

3 回答 3

94

仅使用 iOS API 更简单:

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];
于 2012-11-01T13:14:17.423 回答
12

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

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

作为我,我可能只会使用正则表达式。如果您使用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 的字符”。

于 2009-07-21T17:01:53.560 回答
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]];
于 2010-10-20T11:36:55.680 回答