NSString が数字のみで構成されているかを判定する その2
以前 NSCharacterSet
の decimalDigitCharacterSet
メソッドを使って文字列が数字のみを含んでいるかを調べるコードを書いた。
ここに少しコードを追加して文字列がローカライズとフォーマットされた数字表記のみを含んでいるかどうかを調べるコードにする。
具体的には 1,234,567.89 という表記の場合の千単位のコンマを許容するようにする。
まず NSCharacterSet
の decimalDigitCharacterSet
を使って NSMutableCharacterSet
を作成する。
NSMutableCharacterSet
は addCharactersInString:
メソッドでセットに含む文字列を追加を追加できるのでこのメソッドで千単位の区切り文字を追加する。
この時 addCharactersInString:@","
のようにコンマ指定で文字列をキャラクターセットに追加してはいけない。
例えば英語表記とドイツ語表記では数字の区切りのコンマと小数点の区切りのピリオドの役割が逆になっている。
// en_US 1,234,567.89 // de_DE 1.234.567,89
これらの差異を吸収するのには NSNumberFormatter
を使う。
NSNumberFormatter
の groupingSeparator
プロパティが数字の区切り文字を返してくれるので以下のようにする。
NSMutableCharacterSet *mCharacterSet = [NSMutableCharacterSet decimalDigitCharacterSet]; [mCharacterSet addCharactersInString:numberFormatter.groupingSeparator];
ちなみに NSNumberFormatter
の decimalSeparator
プロパティは小数点の区切り文字列を返してくれる。
まとめ
文字列が数字と数字区切りのみで構成されているかを判定できるコードは以下