2009-03-20 12 views
8

iPhoneでPhone.appのようなセクシーな文字列にユーザーが入力した文字列を変換しようとしています。ここで私が使用しているコードは動作しません(特別なフォーマットは出てこない)、数字の後に文字列の最後に "0"を追加するだけです。リード1のNSNumberFormatterで米国の電話番号をフォーマットする

[formatter setPositiveFormat:@"+# (###) ###-####"]; 

とスピーキング、あなたがチェックする必要があります。まあ

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterNoStyle]; 
[formatter setPositiveFormat:@"+# (###) ###-###"]; 
[formatter setLenient:YES]; 
NSString *strDigits = [self stringByReplacingOccurrencesOfRegex:@"[^0-9+]" withString:@""]; 
return [formatter stringFromNumber:[NSNumber numberWithDouble:[strDigits doubleValue]]]; 

答えて

11

NSNumberFormatterは、かっこ、スペース、またはダッシュをサポートしていないと思います。私はあなたと同じメソッドを実装しようとしましたが、それは静かに失敗し、フォーマットされていないテキストを出力します。

ここでの一般的な問題は、iPhone SDKが電話番号をロケールに応じてフォーマットする方法を提供しないことです。 (私はそれらのためのAppleのオリジナルのバグ#を用意しましたので、既知の問題の重複がこれらの2だった)

私は次のためにAppleとバグを提起している:Appleが提供する理想的な世界で

#6933244 - Need iPhone SDK interface to format text as locale dependent phone number 
#5847381 - UIControl does not support a setFormatter method 
#6024985 - Overridden UITextField drawTextInRect method is never called 

NSPhoneNumberFormatterとなり、UIControlsetFormatterと表示され、textと表示されます。残念ながらそれはiPhoneには存在しません。

2

電話番号はあなたがこれを変更することで起動する必要がありますので、10文字(先頭の1と11)でなければなりませんそれも。

9

UIPhoneFormats.plistには、各ロケールにあらかじめ定義された電話フォーマットが含まれています。あなたは、米国の電話番号のみで興味を持っているのであれば、あなたはこれらのフォーマットを検討する必要があります

+1(###)### - ####
1(### )### - ####
011 $
### - ####
(###)### - ####

私は似た何かをしなければなりませんでした私はここに得た結果を共有しました: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

2

Appleは、既存のフォーマッタの機能が十分でない場合、カスタムフォーマッタを実装できるとしています。

NSFormatterはサブクラス化用です。カスタムフォーマッタは、入力を制限し、斬新な方法でデータの表示を強化することができます。たとえば、ユーザーが入力したシリアル番号があらかじめ定義された形式に準拠していることを確認するカスタムフォーマッターを使用できます。カスタムフォーマッタを作成する前に、パブリックサブクラスNSDateFormatterとNSNumberFormatterが要件を満たすように設定できないことを確認してください。

独自のカスタムフォーマッタを作成する方法については、「カスタムフォーマッタの作成」を参照してください。

the section in Data Formatting Guide

を参照してください。
関連する問題