Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone sdk-从字符串中删除除数字0-9以外的所有字符_Iphone_Nsstring - Fatal编程技术网

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

iphone sdk-从字符串中删除除数字0-9以外的所有字符,iphone,nsstring,Iphone,Nsstring,好的,计划是这样的。我从中获取数据的XML允许在电话号码字段中使用非数字文本(用于描述或联系人姓名等)。我试图只提取这些号码,然后用它们调用tel:URL来发起呼叫。以下是不起作用的地方: NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSString *number = @"(555) 555-5555 Office"; NSString *strippedNumber =

好的,计划是这样的。我从中获取数据的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]];

如果有任何明显的拼写错误,那就是拼写错误。:)

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

我不知道有一个类似“replaceCurrencesofCharactersInSet:(NSCharacterSet*)set”的NS(可变)字符串方法,我承认,拥有它可能真的很好

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

#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的字符”

虽然这已经得到了回答/接受,但我有一个更好的解决方案,不需要外部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]];

仅使用iOS API更简单:

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

关于ARC和iOS 6,RegexKitLite有点过时。请检查我的答案,查看一个没有此库的方法。