好的,所以这是计划。我从中获取数据的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]];
如果有任何明显的拼写错误,它们只是错别字。 :)
答案 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]];