• ベストアンサー

ひらがなチェック

Perl全くの初心者です。基本的なことかもしれませんが、お願いします。 テキストに入力されたデータが適当な値であるかどうかのチェックを行いたいと思っています。 ふりがなの項目にひらがな以外の文字が入っていないか調べたいのですが、参考になるサイトやサンプルコーディングなどあれば教えていただけますか? ひらがなのチェックは文字コードを用いてチェックしたいのですが、どのようにコーディングしたらよいのかわからず、困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

jcode.plのtrを使えばもうちょっと楽に書けそうです。 $\ = "\n"; require 'jcode.pl'; $hira = 'あいうえお'; $kana = 'あイうえお'; $han = 'あいuえお'; $from = 'あ-ん'; &jcode::tr (\$hira,$from,'','d'); &jcode::tr (\$kana,$from,'','d'); &jcode::tr (\$han,$from,'','d'); print 'hira NG' if $hira; print 'kana NG' if $kana; print 'han NG' if $han;

Masa333
質問者

お礼

回答ありがとうございます。 jcode.plの存在は知っているのですが、使い方がまだ全然わかっていない状態で・・・・ これから頑張って勉強したいと思います。 #3さんの補足とあわせて無事チェック処理をすることができるようになりました。 ありがとうございました。

その他の回答 (3)

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.4

#2 です。 #3 さんへ >ぁ-ゞ がひらがなの範囲らしいです。 ぜんぜん気にしてませんでした。 ご指摘感謝です。 (「ぁ」「あ」の順番なんですね。「あ」「ぁ」にしてくれれば良いのに。。。) と、言うわけで、こんな感じかな? (ひらがなに含めたい文字がある場合は、ゞのあとに追加) $\ = "\n"; require 'jcode.pl'; $hira = 'あいうえおぁ'; $kana = 'あイうえお'; $han = 'あいuえお'; $from = 'ぁ-ん゛゜ヽ-ゞ'; &jcode::tr (\$hira,$from,'','d'); &jcode::tr (\$kana,$from,'','d'); &jcode::tr (\$han,$from,'','d'); print 'hira NG' if $hira; print 'kana NG' if $kana; print 'han NG' if $han;

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.3

#1 です。 #2 さんへ > $from = 'あ-ん'; ですが、正確には、ぁ-ゞ がひらがなの範囲らしいです。(「ぁ」は意識があったのですが、「ゞ」は調べるまで考えませんでした(笑)) 同様に、カナは ァ-#A5FA(EUC) だそうです。

Masa333
質問者

お礼

アドバイスありがとうございます。 「ぁ」が「あ」の前とは思いませんでした。 #2さんのコーディング例を使用させてもらい、無事処理を行うことができました。 ありがとうございます。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

力技になってしまいました(^_^;) #!/use/local/bin/perl @test = qw(あいうえお あいウえお あいuえお ); foreach (@test) { printf("%-20s => %s\n", $_, (ishira($_) == 1) ? 'はい' : 'いいえ'); } exit(0); sub ishira { my($p) = @_; my($r, $l, $i, $m); my($hira_euc) = '(?:\xA4[\xA1-\xF3])'; my($hira_sjis) = '(?:\x82[\x9F-\xF1])'; $r = 1; $l = length($p); for ($i = 0; $i < $l; $i++) { $m = substr($p, $i, 1); if (unpack("C", $m) > 127) { $m .= substr($p, ++$i, 1); $r = 0 unless ($m =~ $hira_euc); } else { $r = 0; } } ($r); }

関連するQ&A