-PR-
締切済み

投稿した文字がカタカナかどうかを調べる方法

  • 暇なときにでも
  • 質問No.94379
  • 閲覧数47
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 52% (20/38)

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

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

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

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

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

foreach (@furigana){

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

#フラグを上げる。
$flag = 1;
}
}
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 29% (334/1115)

とほほのWWW入門の中の unpack の解説のページです。 ...続きを読む
とほほのWWW入門の中の unpack の解説のページです。
関連するQ&A


  • 回答No.2
レベル7

ベストアンサー率 66% (6/9)

以下を参考にしてはどうでしょうか。 #------------------------------------------------------------------------------# #概要ひらがな入力チェック処理 #入力$my_cf_val入力値 #$my_val_lenレングスチェック値 -1:未チェック #戻り値0:正常 #-1:入力桁数異常 #-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);
}
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ