# 入力文字を 全角・半角カナ・ASCII に区別するサンプルコード # Winの標準文字コード SJISを EUCに変換して文字種判定 # Winで表示するために再び SJISに逆変換 require 'jcode.pl'; $A = "re:!漢字申実芝叱カタカナカタかな1A"; print "入力文字 :" . "$A" . "\n"; # $A を EUC-JP に変換する jcode::convert(\$A, 'euc'); # $A を文字単位に分割して配列 @chars に代入する $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; @chars = $A=~ /$ascii|$twoBytes|$threeBytes/og; # 叱実芝 # @chars に全角文字 半角カタカナ が含まれているか判定する for ($i=0; $i < @chars; $i++ ){ $Aa = $chars[$i]; # 1字ずつ取り出して文字種を判別する $Aaa = $Aa; jcode::convert(\$Aaa, 'sjis'); print $Aaa . " \,"; # 全角文字か? if ($Aa =~ /[\xA1-\xFE][\xA1-\xFE]/) { $jz++; $Az .= $Aa; } # 半角カタカナか? elsif ($Aa =~ /\x8E/) { $jk++; $Ak .= $Aa; } # ASCII? elsif ($A =~ /[\x8E\xA1-\xFE]/) { $jn++; $An .= $Aa; } # 以外 else { $je++; $Ae .= $Aa; } $j++; } $Aaa = "文字数:"; jcode::convert(\$Aaa, 'sjis'); print "\n" . $Aaa . "$j" . "\n"; print "\n"; if ($jz) { $Az = "全角文字:" . $Az; jcode::convert(\$Az, 'sjis'); print "$Az" . "\n"; } if ($jk) { jcode::convert(\$Ak, 'sjis'); $Ak =~ s/\x8E//g; $Aka = "半角カナ:"; jcode::convert(\$Aka, 'sjis'); print "$Aka" . "$Ak" . "\n"; } if ($jn) { $An = "ASCII:" . $An; jcode::convert(\$An, 'sjis'); print "$An" . "\n"; } if ($je) { $Ae = "ASCII・全角・半角カナ 以外:" . $Ae; jcode::convert(\$Ae, 'sjis'); print "$Ae" . "\n"; }