2

IOS で、アドレス帳から取得した +-#*() を削除する方法。例えば:

 NSString *txt = @"+1(510)1234567"
 txt = [NSString stringWithFormat:@"tel://%@", txt];
 [[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:txt]];

電話をかけるには無効な番号です。 [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlToCall]];このタイプ番号には役に立ちません。

...を使用する以外に、いくつかのより良いオプションがありますか [txt stringByReplacingOccurrencesOfString:@"-" withString:@""]? 電話をかけたいだけです。

ご協力いただきありがとうございます。


実際、openURL で呼び出すことができます。呼び出しの形式は「tel://」ではなく、「tel:」です。だから、私がすべきことは次のとおりです。

NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:  
  [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] 
invertedSet]]     componentsJoinedByString:@""];
NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", cleanedString]];

それで大丈夫です。

——————————————————————————————— @"tel://" は電話をかける正しい URL ではありません。 @"tel:" を使用する必要があります。

+1 (510) 3436 などの数値でない場合は、
BOOL bCanCall = [[UIApplication sharedApplication]canOpenURL:urlToCall]; False を返します。電話をかけることはできません。

4

3 に答える 3

3

こんな感じで外せます..

NSString *s = @"+1(510)1234567";
NSCharacterSet *unwantedStr = [NSCharacterSet characterSetWithCharactersInString:@"+()"];
s = [[s componentsSeparatedByCharactersInSet: unwantedStr] componentsJoinedByString: @""];
NSLog(@"%@", s); 
于 2013-04-11T12:23:11.883 に答える
3

これを試してください、うまくいくかもしれません

-(NSString *) formatIdentificationNumber:(NSString *)string
{
    NSCharacterSet * invalidNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"\n_!@#$%^&*()[]{}'\".,<>:;|\\/?+=\t~` "];

    NSString  * result  = @"";
    NSScanner * scanner = [NSScanner scannerWithString:string];
    NSString  * scannerResult;

    [scanner setCharactersToBeSkipped:nil];

    while (![scanner isAtEnd])
    {
        if([scanner scanUpToCharactersFromSet:invalidNumberSet intoString:&scannerResult])
        {
            result = [result stringByAppendingString:scannerResult];
        }
        else
        {
            if(![scanner isAtEnd])
            {
                [scanner setScanLocation:[scanner scanLocation]+1];
            }
        }
    }

    return result;
}

またはリンクを参照してください

于 2013-04-11T12:22:27.013 に答える
1

Alternativ、ここにいくつかのヒントがありますが、コードを最適化できます。

- (void)testExample
{
    NSMutableCharacterSet *mvalidCharSet = [[NSMutableCharacterSet alloc] init];
    [mvalidCharSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet] ];
    [mvalidCharSet addCharactersInString: @"+"]; 
    NSCharacterSet *validCharSet = [mvalidCharSet copy]; // not mutable -> more efficient
    NSCharacterSet *invalidCharSet = [validCharSet invertedSet];
    NSString *txt = @"+1(510)1234567";
    NSArray * components = [txt componentsSeparatedByCharactersInSet:invalidCharSet];
    NSString * rejoin = [components componentsJoinedByString:@""];
    NSLog(@"%@", rejoin);
}
于 2013-04-11T12:31:42.703 に答える