16

OKこれが計画です。私がデータを取得している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]];

明らかなタイプミスがある場合、それらは単なるタイプミスです。:)

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

stringByTrimmingCharactersInSetの代わりにstringByRemovingCharactersInSetを使用できるようになりました。ただし、次のように、国際番号の「+」文字をサポートするために、サンプルコードに別のわずかな変更を加えることもお勧めします。

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 に答える