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

jme*_*do3 16 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]];
Run Code Online (Sandbox Code Playgroud)

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

Res*_*h32 93

仅使用iOS API更简单:

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


Dav*_*ong 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:@""];
Run Code Online (Sandbox Code Playgroud)

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

仅供参考:"[^ 0-9]"表示"任何不是0,1,2,3,4,5,6,7,8或9的字符".


jha*_*ott 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
Run Code Online (Sandbox Code Playgroud)

现在您可以使用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]];
Run Code Online (Sandbox Code Playgroud)