- 締切済み
投稿した文字がカタカナかどうかを調べる方法
投稿フォームにフリガナ欄を付けたのですが、 フリガナがカタカナかどうかを調べる箇所でつまづいています。 「ポケットリファレンス」を見よう見まねで下のように作ってみたのですが、 配列furiganaの各要素に一文字ずつ入ってくれません。 (文字列を数字に変換したものがひとつの要素に代入されてしまう) ループを使えば解決してしまうのですが、 「ポケットリファレンス」によると各文字ごとに各要素に入ってくれるようなので 納得がいきません。 いまいちunpackの使い方が分からないので、アドバイスありましたらよろしくお願いいたします。 #フリガナ欄の文字列を16進数に変換して配列に入れる。 @furigana = unpack("H*", $QUERY{furigana}); foreach (@furigana){ #シフトJISの0x8346より前もしくは0x8396より後なら if(($_ < 8340) || (8396 < $_)){ #フラグを上げる。 $flag = 1; } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- okwebenomoto
- ベストアンサー率66% (6/9)
以下を参考にしてはどうでしょうか。 #------------------------------------------------------------------------------# # 概要 ひらがな入力チェック処理 # 入力 $my_cf_val 入力値 # $my_val_len レングスチェック値 -1:未チェック # 戻り値 0:正常 # -1:入力桁数異常 # -2:ひらがな以外あり #------------------------------------------------------------------------------# sub hiragana_chk { my ($my_cf_val,$my_val_len) = @_; my @my_cf_kana = ('ぁ','あ','ぃ','い','ぅ','う','ぇ','え','ぉ','お', 'か','が','き','ぎ','く','ぐ','け','げ','こ','ご', 'さ','ざ','し','じ','す','ず','せ','ぜ','そ','ぞ', 'た','だ','ち','ぢ','っ','つ','づ','て','で','と','ど', 'な','に','ぬ','ね','の', 'は','ば','ぱ','ひ','び','ぴ','ふ','ぶ','ぷ', 'へ','べ','ぺ','ほ','ぼ','ぽ', 'ま','み','む','め','も', 'ゃ','や','ゅ','ゆ','ょ','よ', 'ら','り','る','れ','ろ', 'ゎ','わ','ゐ','ゑ','を','ん', 'は','か','け','ー'); my $my_cf_work; my $my_cf_len; my $my_cf_i; my $my_cf_j; my $my_cf_chk_flg = 0; my $my_cf_hiranum = 87; $my_cf_len = length($my_cf_val); if($my_cf_len == 0) { return(-1); } if($my_val_len != -1) { if($my_cf_len != $my_val_len) { return(-1); } } if(($my_cf_len % 2) != 0) { return(-1); } for($my_cf_i = 0 ; $my_cf_i < $my_cf_len ; $my_cf_i += 2) { $my_cf_chk_flg = 0; $my_cf_work = ''; $my_cf_work = substr($my_cf_val,$my_cf_i,2); for($my_cf_j = 0 ; $my_cf_j < $my_cf_hiranum ; $my_cf_j++) { if($my_cf_work eq $my_cf_kana[$my_cf_j]) { $my_cf_chk_flg = 1; } } if($my_cf_chk_flg == 0) { return(-2); } } return(0); }
- inoue64
- ベストアンサー率29% (334/1115)
とほほのWWW入門の中の unpack の解説のページです。