• 締切済み

Perl UTF8 での全角カタカナチェック

■環境 Linux, Perl 5.8 です。 画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。 HTMLもPerlも文字コードはUTF-8です。 ■質問 フォームからうけとった文字列で全角カタカナと特定の全角記号以外はエラーとする 入力チェック処理(正規表現)がうまくチェックを行ってくれません。 SJISだと以下のような書き方があるそうなのですが、UTF8での書き方がわかりません。 ・SJIS if($data !~ /^(?:\x83[\x40-\x96])+$/){ $mes="全角カナ以外の文字が指定されています"; } UTF8での書き方を教えて頂きたいです。 なお、許容する全角カタカナと特定の全角記号は以下のとおりです。 ========================================================== アイウエオカキクケコサシスセソタチツテトナニヌネノ ハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン ァィゥェォッャュョヵヶヴガギグゲゴザジズゼゾダヂヅデド バビブベボパピプペポーヽヾ ========================================================== ご教授お願い致します。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

Unicode ブロック指定の \p{InKatakana} なんかが使えると楽かも.

関連するQ&A

  • Perl UTF8 での氏名チェック

    ■環境 Linux, Perl 5.8 です。 画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。 HTMLもPerlも文字コードはUTF-8です。 ■質問 フォームからうけとった文字列で以下の文字以外をエラーとする入力チェック処理(正規表現)をUTF8用に作りたいです。 ・漢字 ・ひらがな ・全角記号(ー-のみ) ・全角スペース ・全角カタカナ(http://okwave.jp/qa4997637.html) 直前の全角カタカナチェック(http://okwave.jp/qa4997637.html)と類似しているのですが、別に質問させていただきました。 色々探してみたのですが、UTF8でそのようなチェックモジュールが見つからず、 正規表現で書くしかないのかと思い、正規表現でも書いてみましたがうまくいきませんでした。 チェックモジュールが存在するのであれば教えて頂きたいです。 または、以下のようなシンプルな書き方(以下はUTF8ではなくSJISの全角カタカナチェックですが)があればご教授頂きたいです。 また、文字コードの対応(例えば\x40が何の文字にあたるか)がUTF8で分かれば応用がきくのですが、 それも見つからなかったので、対応表、調べ方をご存知の方がいらっしゃったらご教授頂きたいです。 ・SJISの全角カタカナチェック if($data !~ /^(?:\x83[\x40-\x96])+$/){ $mes="全角カナ以外がありますよ"; } よろしくお願い致します。

  • 全角カタカナ入力チェック

    PHP5 SJIS 環境 入力した文字列を全角カタカナか調べています。 mb_ereg("^[ア-ン]+$",$str) だけで確認すると『ヴ』や『ァ』の文字がカタカナとして 判断してくれません。 よい方法あれば教えて下さい。

    • ベストアンサー
    • PHP
  • perl の grepで 全角カタカナで検索できません

    perl の以下のソースで、実行エラーになってしまいます。 grep で全角カタカナで検索できないのです。半角カタカナでは、うまく動きました。 全角文字(たとえば’中華’)でも正しく「中華料理」と出力されます。 ’ラーメン’で検索したら、’ラーメン店’と出力されるのが正しいと思うのですが、 なぜ動かないんでしょ? ↓ソース #!/usr/bin/perl @aaa = ("ラーメン店","カレーハウス","中華料理"); @aaa = grep /ラーメン/ , @aaa; print "Content-type: text/html\n\n"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n"; print <<"HTML"; @aaa HTML exit;

  • Perlの正規表現(全角カナの判定について)

    Perlの正規表現について、教えてください。 HTMLのフォームからSJISでデータを受け取り、全角カナ(と、ーヽヾ)であるかどうかのチェックをしたいと思います。 if ($FORM{'FURIGANA'} =~ /(?:\x83[\x40-\x96]|\x81[\x45\x5B\x52\x53])/){ ; } else { ・・・・・ 上記であれば、$FORM{'FURIGANA'}に全角カナが一文字でも含まれていれば真、含まれていなければ偽で動くと思うのですが、では$FORM{'FURIGANA'}が全て全角カナであれば真、それ以外の文字が一文字でも含まれていれば偽という判定をするにはどのような表現にしたらよいのでしょうか。 いろいろ試してみたのですが、どうもうまくいきません。どうかお知恵をお貸し下さい。

    • ベストアンサー
    • Perl
  • UTF-16の半角か全角の見分け方

    こんにちは、makotoと申します。現在CでUTF-16のファイルからSJISに変換してファイルに落とすという 処理を作っているのですが、UTF-16の半角と全角を見分ける方法はあるのでしょうか?

  • 全角カタカナチェックの方法

    住所入力欄(全角カタカナ)での入力チェックを作りたいのです。”アサクサ1-1-4モリビル1F”のような入力が予想されるので、全角カタカナ、全角数字、全角英字、”-”以外の文字は入力を認めないようにしたいのです。なにかいい方法はありませんか?

  • 全角カタカナチェックについて

    現在Perlを使ってpostから受け取ったデータを全角のカタカナかどうかをチェックさせるスクリプトを書いていますがいろいろしらべていますがどうもやはりうまくいきません。 文字コードは今後のことを考えてutf-8です。 以下のようにこころみたのですがやはりうまくチェックできたいないようです。 $var =~ /[^(ア|ァ|イ|ィ|ウ|ゥ|エ|ェ|オ|ォ|ー|カ|ガ|キ|ギ|ク|グ|ケ|ゲ|コ|ゴ|サ|ザ|シ|ジ|ス|ズ|セ|ゼ|ソ|ゾ|タ|ダ|チ|ヂ|ツ|ヅ|ッ|テ|デ|ト|ド|ナ|ニ|ヌ|ネ|ノ|ハ|バ|パ|ヒ|ビ|ピ|フ|ブ|プ|ヘ|ベ|ペ|ホ|ボ|ポ|マ|ミ|ム|メ|モ|ヤ|ャ|ユ|ュ|ヨ|ョ|ラ|リ|ル|レ|ロ|ワ|ヲ|ン|-| | )]/ どうにか上のような正規表現をつかってチェックできないでしょうか? ご教授よろしくお願いします。

    • 締切済み
    • CGI
  • utf-8について

    こんにちは。 今、文字コードについて調べているのですが、utf-8がなぜプログラミングと相性が良いのか分かりません。 ここのサイトを調べていると、画面(SJIS)から文字を打ち、utf-8にコード変換して処理をする質問が多いように感じました。 なぜ、utf-16ではなく、utf-8なのかと思っております。 よろしくお願いします。

  • ActivePerl UTF-16の変換

    Active PerlをWindows上で利用しています。 (This is perl, v5.8.7 built for MSWin32-x86-multi-thread) 今回、毎回UTF-16という文字コードで生成されるテキストデータを Perlスクリプトで処理させたいのですが、sjis等への文字変換を スクリプト内で行うにはどうすれば良いでしょうか。 use Encode; では、"utf8"はありますが、"utf16"というのはありません。 Perlスクリプトに食わせる前に、(テキストエディタなどで手動で文字エンコードさせるのではなく) バッチ処理的に文字列変換できる方法でも構わないのですが、 何か良い方法がありましたら、お教えください。よろしくお願いします。

  • SJISで取得した半角カナをUTF-8に変換する方法

    現在、画面がSJISで作成されており、スクリプトはUTF-8で作成されています。 画面から来るデータを全て自動的にUTF-8に変換し、スクリプト上で処理し、 最後に自動的にSJISに変換し直して画面へ出力しています。 しかし、半角カナだけの文字列が画面から渡ってきた場合、 文字エンコーディングした瞬間、化けます。 全角文字を含んでいれば問題ないのですが・・・。 化けてしまう為、スクリプト内で既に支障を来たしてしまいます。 これをどうにか解消させる方法はありませんでしょうか? 以下、決定事項の為、変更する事は出来ません。  ・画面はSJISで出力、テンプレートファイルもSJISで記述  ・スクリプトはUTF-8で記述  ・根本的なエンコーディング処理   (受け取った値に対して、以下の処理を走らす。   mb_language("japanese");   mb_convert_encoding("UTF-8", "auto");   画面へ出力する際に、以下の処理を走らす。   mb_language("japanese");   mb_convert_encoding("SJIS", "auto");としている)  ・画面から受け取る文字列は何でも受け取る どなたかご教示下さい。

    • ベストアンサー
    • PHP

専門家に質問してみよう