NSStringに全角文字(マルチバイト文字)が含まれているかどうかの判定です。
検索してもシンプルな方法が見つからなかったので投稿します。
[追記] よりシンプルな解決方法
NSStringの- canBeConvertedToEncoding:
でASCIIコードにロスなくエンコード出来るかどうかを調べる方法です。
使用例
[text canBeConvertedToEncoding:NSASCIIStringEncoding]
投稿のメソッドですと、 \0
がNOと判定される問題もありましたので - canBeConvertedToEncoding:
を使用した方がよさそうです。
コメント欄にてicecocoa6さんに教えて頂きました。
ありがとうございます。
サンプルコード
NSStringのlengthは半角も全角も1文字でカウントします。
C言語のstrlen関数は全角を2でカウントしますのでそれを利用します。
NSStringのカテゴリに実装しました。
NSString+Validation.h
@interface NSString (Validation)
- (BOOL)isAllHalfWidthCharacter;
@end
NSString+Validation.m
@implementation NSString(Validation)
- (BOOL)isAllHalfWidthCharacter
{
NSUInteger nsStringlen = [self length];
const char *utf8 = [self UTF8String];
size_t cStringlen = strlen(utf8);
if (nsStringlen == cStringlen) {
return YES;
} else {
return NO;
}
}
@end
実行例
1文字でも全角が含まれているとNOを返します。
Sample.m
NSString *text = @"aiueo";
NSLog(@"%@", text.isAllHalfWidthCharacter ? @"YES" : @"NO");
// YES
text = @"あiueo";
NSLog(@"%@", text.isAllHalfWidthCharacter ? @"YES" : @"NO");
// NO