プロが教える店舗&オフィスのセキュリティ対策術

投稿フォームにフリガナ欄を付けたのですが、
フリガナがカタカナかどうかを調べる箇所でつまづいています。

「ポケットリファレンス」を見よう見まねで下のように作ってみたのですが、
配列furiganaの各要素に一文字ずつ入ってくれません。
(文字列を数字に変換したものがひとつの要素に代入されてしまう)

ループを使えば解決してしまうのですが、
「ポケットリファレンス」によると各文字ごとに各要素に入ってくれるようなので
納得がいきません。

いまいちunpackの使い方が分からないので、アドバイスありましたらよろしくお願いいたします。

#フリガナ欄の文字列を16進数に変換して配列に入れる。
@furigana = unpack("H*", $QUERY{furigana});

foreach (@furigana){

#シフトJISの0x8346より前もしくは0x8396より後なら
if(($_ < 8340) || (8396 < $_)){

#フラグを上げる。
$flag = 1;
}
}

A 回答 (2件)

以下を参考にしてはどうでしょうか。


#------------------------------------------------------------------------------#
#概要ひらがな入力チェック処理
#入力$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);
}
    • good
    • 0

とほほのWWW入門の中の unpack の解説のページです。



参考URL:http://tohoho.wakusei.ne.jp/wwwperl2.htm#unpack
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!