すべて漢字かどうか調べる

UTF-8 単純な方法 (完全ではありません)

if(preg_match("/^[一-龠]+$/u",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

UTF-8 単純な方法 (テキストエディタによっては文字化けします)

if(preg_match("/^[一-龥-I]+$/u",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

UTF-8 コード表記

if(preg_match("/^(¥xe4[¥xb8-¥xbf][¥x80-¥xbf]|[¥xe5-¥xe9][¥x80-¥xbf][¥x80-¥xbf]|¥xef¥xa4¥xa9|¥xef¥xa7¥x9c|¥xef¥xa8[¥x8e-¥xad])+$/u",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

UTFでは、修飾子『 u 』をつけないと、いくつかの文字を認識できないことがあります。
(修飾子『 i 』などをあわせてつけたとき)

EUC-JP コード表記

if(preg_match("/^([¥xb0-¥xf4][¥xa1-¥xfe]|[¥xf9-¥xfc][¥xa1-¥xfe]|¥x8f[¥xb0-¥xf4][¥xa1-¥xfe])+$/",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

EUC-JP では、文字の範囲指定をすると正しく認識できません。

Shift-JIS コード表記

if(preg_match("/^([¥x88-¥x9f][¥x40-¥xfc]|[¥xe0-¥xfb][¥x40-¥xfc]|¥xfc[¥xa2-¥xee])+$/",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

UTF-8 EUC-JP Shift-JIS共通

if(preg_match("/^(¥xe4[¥xb8-¥xbf][¥x80-¥xbf]|[¥xe5-¥xe9][¥x80-¥xbf][¥x80-¥xbf]|¥xef¥xa4¥xa9|¥xef¥xa7¥x9c|¥xef¥xa8[¥x8e-¥xad]|".
                  "[¥xb0-¥xf4][¥xa1-¥xfe]|[¥xf9-¥xfc][¥xa1-¥xfe]|¥x8f[¥xb0-¥xf4][¥xa1-¥xfe]|".
                  "[¥x88-¥x9f][¥x40-¥xfc]|[¥xe0-¥xfb][¥x40-¥xfc]|¥xfc[¥xa2-¥xee])+$/",$str)){
  echo "漢字のみです";
}else{
  echo "漢字のみではありません";
}

文字コード表からUTF部分を抜粋すると文字コードは以下です。

Unicode S-JIS   JIS       EUC-JP    文字
0x4E00  0x88EA  0x306C    0xB0EC    一
0x4E01  0x929A  0x437A    0xC3FA    丁
.........
0x9F9D  0xE273  0x6354    0xE3D4    龝
0x9FA0  0xEA9E  0x737E    0xF3FE    龠
0x9FA0  0xEA9E  0xF3FE    0x737E    龠
0x9FA1          0x446D60  0x8FEDE0  龡
0x9FA2          0x446D61  0x8FEDE1  龢
0x9FA3          0x446D62  0x8FEDE2  龣
0x9FA4                              龤
0x9FA5          0x446D63  0x8FEDE3  龥
0xF929  0xFAE0  FAC6                
0xF9DC  0xFBE9  FCCF                

0xFA2B  0xFBF7  FCDD                
0xFA2C  0xFBF9  FCDF                
0xFA2D  0xFC49  FCEC                I

UTF以外は並びが ちょっと違います。

S-JIS   JIS     EUC-JP  Unicode 文字
0x889F  0x3021  0xB0A1  0x4E9C  亜
0x88A0  0x3022  0xB0A2  0x5516  唖
0x88A1  0x3023  0xB0A3  0x5A03  娃
0x88A2  0x3024  0xB0A4  0x963F  阿
0x88A3  0x3025  0xB0A5  0x54C0  哀
.........
0xEA9E  0x737E  0xF3FE  0x9FA0  龠
0xEA9F  0x7421  0xF4A1  0x582F  堯
0xEAA0  0x7422  0xF4A2  0x69C7  槇
0xEAA1  0x7423  0xF4A3  0x9059  遙
0xEAA2  0x7424  0xF4A4  0x7464  瑤
0xEAA3  0x7425  0xF4A5  0x51DC  凜
0xEAA4  0x7426  0xF4A6  0x7199  熙

ここからわかるのが、Unicodeは画数の少ない『一』から、画数順になっているのに対し、 それ以外の文字コードは50音順の『亜』から始まっています。

UTC(Unicode Technical Committee)の定義したUnicode文字のブロックの範囲は以下です。
しかしこの範囲以外にも漢字があります。

文字の種類ブロックの範囲(16進表記)ブロック名
ひらがな3040 〜 309FHiragana
カタカナ30A0 〜 30FFKatakana
漢字4E00 〜 9FFFCJK Unified Ideographs

関連記事

スポンサーリンク

DEGRESS関数 ラジアンから度に変換する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る