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