LoginSignup
36

More than 5 years have passed since last update.

NSString 半角・全角の判定

Last updated at Posted at 2013-03-03

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36