11

私のアプリでは、連絡先の番号のリストを取得して、それらを操作しようとしています。新しい連絡先を追加するたびに (iOS 7 に更新した後)、新しく追加された番号にスペースがあるため、新しい連絡先の書式設定が変更されていることに気付きました。

通常の置換メソッドを使用しても、スペースは削除されません。

これらは本当にスペースですか、それとも何ですか? 私の目的は、「スペース」の空き番号を取り戻すことです。

たとえば、番号が の場合、1 818 323 323 323取得したい1818323323323

4

8 に答える 8

19

私はこれを「スペース」を取り除くのではなく、小数点以下の文字だけが残っていると考えました。このコードは私のためにそれをしました:

phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

これにより、0 ~ 9 以外のすべての数字が取り出されます。

スウィフト 4.1:

phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
于 2014-04-08T21:25:19.650 に答える
8

これを試して:

NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];

これは、あらゆる種類のスペースで機能するはずです (多くのスペースがあります)。やや非効率に思えるかもしれませんが、電話番号の場合はこれで問題ありません。

于 2013-11-02T16:33:34.540 に答える
5

あまりにも多くの文字列のクリーニングを行った後、アドレス帳から直接 CFStringRef を印刷した後、最終的に答えを見つけました。舞台裏で起こっていることは次のとおりです...

  1. iOS7 に連絡先を追加すると、Apple はこれを保存します: (555).555-5555 (. は実際には U00A0 または   です)
  2. 私のアプリは、AddressBook から CFStringRef に連絡先の情報をコピーします (NSLogged の場合は . が表示されます)。
  3. CFStringRef は NSString にキャストされます (NSLog は現在 555\U00a0555-5555 を示しています)

\U00A0 を削除するために、このスレッドと [NSCharacterSet characterSetWithRange:(160,1)] から 3 つの回答を試しましたが、うまくいきませんでした。最終的に機能したのは、次のコード行です。

phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""];

// どこ @"。" Option+スペースバーを入力して作成されました

于 2013-12-12T00:02:28.220 に答える
5

別の (非常に柔軟な) オプションは、正規表現を使用することです。これにより、 + またはその他の必要な文字を保持できます。

let numberFromAddressBook = "+1 818 323 323 323"

let cleanNumber = numberFromAddressBook.stringByReplacingOccurrencesOfString("[^0-9+]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil)

"+1818323323323"
于 2016-06-23T23:30:51.307 に答える
2

誰かが番号の先頭にある + を維持したい場合に備えて、ポスターの回答を少し調整しました。

スペースを削除した後もプラスを維持したい場合は、この小さな調整を行いました.

 Boolean shouldAddPlus = NO;

 if([[phoneNumber substringToIndex:1] isEqualToString:@"+"])
    {
        shouldAddPlus = YES;
    }

 phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

 if(shouldAddPlus)
    phoneNumber = [base stringByAppendingString:phoneNumber];
于 2015-03-26T09:30:37.397 に答える
1

正しい解決策は、オカレンスを有効なスペースに置き換えることです

NSString *clean = [dirty stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "];

したがって、スペースを失うことはなく、ユーザーは他のアプリで見ているものを見ることができます。

于 2016-02-09T16:19:09.323 に答える