• ベストアンサー

フォーム入力のチェック

フォームの入力をCGI(Perl)でチェックするとき、 全角の漢字、カタカナ、ひらがなでの入力以外は禁止にしたいです。 どなたかいい方法をご存知でしょうか? とりあえず、現在は、 jcode.plで全角英数字⇒半角英数字に変換 フォームに入力された文字列を一文字(半角2文字)ずつ抽出して、 $a=~ s/([^\w ])/'%' . unpack("H2", $1)/eg; でエンコードしたものが%を含んでいるかどうかで判別してます。 でもこれだと全角英数字と半角英数字しかシャットアウトできません。 記号文字なども入力出来ないようにしたいです。 よろしくお願いします。

  • CGI
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.3

失敬。 いきなりコードから書いたので、何故に EUC-JP なのかとかも書いてなかったですが、EUC-JP なら、全角文字に 7bit 部が含まれていないので、jcode::tr で全角の英数記号を半角 (7bit) にしてしまえば、7bit 文字が存在すれば「禁止文字が入ってる」という理論が成り立ちます。 しかも、先ほど書いた jcode::tr 部分は、某サイトからのコピペだったので、一部間違ってますね (正常に動作しません) ちなみに、半角英数文字を jcode::tr で使用する時、私は以下のような書き方を常用しています。(基本的にコードに全角文字が入ってるのが生理的に嫌いなのでこうしてるんですが。。。) こちらは正常に動作するので、こちらをお使いくだしゃい。 --- &jcode::tr(\$a2euc, (join '', map{ pack('C', hex($_)); } qw(A3 B0 2D A3 B9 A3 C1 2D A3 DA A3 E1 2D A3 FA A1 A1 A1 AA A1 C9 A1 F4 A1 F0 A1 F3 A1 F5 A1 C7 A1 CA A1 CB A1 F6 A1 DC A1 A4 A1 DD A1 A5 A1 BF A1 A7 A1 A8 A1 E3 A1 E1 A1 E4 A1 A9 A1 F7 A1 CE A1 EF A1 CF A1 B0 A1 B2 A1 C6 A1 D0 A1 C3 A1 D1 A1 C1)), '0-9A-Za-z !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'); ---

harisun
質問者

お礼

ご回答ありがとうございました。 &jcode'tr(↓の方)を自分なりに修正して使ってみたところ、 うまくいっているみたいです。 どうもありがとうございました。

その他の回答 (2)

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

require 'jcode.pl'; # チェック対象文字 $a = 'こんにちは。教えて!goo です'; # 一応、元の文字を保存する my $a2euc = $a; # EUC-JP にする jcode::convert(\$a2euc, 'euc'); # 全角英数記号を半角にする (全角部分は当然 EUC-JP) jcode::tr(\$a2euc, '0-9A-Za-z @!”#$%&’()=-^¥|{}:;+*?_/<>', '0-9A-Za-z @!"#$%&\'()=-^{}:;+*?_/<>'); # 半角文字が入ってたらエラーメッセージ if($a2euc =~ /[\x20-\x7e]/){ print '['.$a.'] にはひらがな、カタカナ、漢字以外が含まれています'; } --- 制御コード (タブや改行) は無視しています。スペースも「禁止文字」なのでエラー扱いになります。スペースぐらいは許したいという場合は、正規表現内の文字クラスを [\x21-\x7e] に変えてください。

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.1

文字チェックをPerlで行うなら正規表現を用います。 すでにチェックで使われているようなので詳しくは省きます。 もし解らなかったら「正規表現」で検索すればたくさん出てきますよ。 正規表現で文字のコードから半・全角、平仮名、片仮名を判断できます。 下記URLのページにサンプルがたくさん載ってますので参考にしてください。 文字の判定の記述がそのまま載っていますのでそのままコピーして使えると思います。

参考URL:
http://www.din.or.jp/~ohzaki/regex.htm
harisun
質問者

お礼

ご回答ありがとうございました。 教えていただいたurlはこれからも参考になりそうです。

関連するQ&A

  • ひらがな、カタカナの入力ができなくなりました。

    WindowsXPのノートパソコンをつかっています。 タスクバーにある文字の切り替えで、『あ』という表示のひらがなの設定にしてあるのに打った文字は英数字になってしまいます。 また、カタカナ全角、カタカナ半角の設定にしていても英数字になってしまいます。 全角英数字や半角英数字はそれぞれの大きさで英数字で正しく表示されます。 どうすれば、ひらがなやそれを変換して漢字が入力できるようになるでしょうか? 困っています。この質問は別のパソコンで書いています。 文字のプロパティでの設定は、かな入力にしてあります。念のためローマ字入力にして試しましたが、これにしてもやはり英数字が表示されてしまいます。 キー設定や色設定はATOK 、IME97などを試しましたが、どれでも上手くいきません。 再起動したりしても、よくなりません。 よろしくお願いします。  

  • Jcodeについて

    Jcodeについて教えてください。 Shift-jisで処理している文字列でJcodeを使用すると 半角カタカナ→全角カタカナ 半角小文字英字→半角大文字英字 への変換は文字コードをecuにしなくてもうまくいくのですが 全角英数字→半角英数字 に変換するとうまくいきません。 これはどうしてなのでしょうか?

    • ベストアンサー
    • Perl
  • 半角英数字のみを受け付ける入力フォーム

    PHPで半角英数字文字のみを受け付ける入力フォームをつくりたいので教えてください。 JavaScriptではコピペで全角を受け付けてしまうので困っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 入力切替について

    今の今まで「半角英数字入力」⇔「ひらがな入力」を 「半角/全角」キー1つで切り替えて使っていたのですが、何かの拍子に 「ひらがな入力から半角英数字に切り替えるときは半角/全角キー1つで切り替えられる」 のに 「半角英数字入力からひらがな入力に切り替えるときはALT+半角/全角キーを押さないと切り替えられない」 状態になってしまいました。 元の状態に戻すにはどうしたらよいのでしょうか。 よろしくお願いします。

  • Vista チャット内の文字入力

    質問します。 Yahooなどの文字入力はできるのですが、チャットや オンラインゲーム内での文字入力が 英数字入力になり、abcdなどしか打てません。 Altや、かたかなひらがなキー、半角・全角キーなど いろいろ試しましたが、できませんでした。 改善方法を教えてください。

  • エクセルでひらがな入力した列を半角カタカナに一括変換するには?

    エクセルに約500件もひらがな入力した列を、半角カタカナに一括変換するにはどうすればいいのでしょう?全角英数字を半角英数字に変換は出きるようですが、こんなこと出きるのでしょうか?

  • パソコン画面の右下にあとか全角ひらがななどの切り替えがでてこない。

    パソコン画面の右下にあとか全角ひらがな、全角カタカナ、半角カタカナ、半角英数字などの切り替えがでてこなくなりました。いつも文字を入力するときこれをクリックして選択して切り替えていました。表示するにはどうすればよいでしょうか?

  • EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

    EXCELで入力しているデータをフィルターを使用して検索できる データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。 フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。 ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが ASC関数ですとカタカタも半角カタカナに変換されるので 英数字だけを全角→半角にする関数や方法などあれば教えてください。 入力データは 漢字、ひらがな、カタカナ、英数字が混在しています。 希望 全角→漢字、ひらがな、カタカナ 半角→英数字 宜しくお願い致します。

  • ひらがな入力ができません。

    こちらのサイトにはお世話になっております。 先程、検索をするために自分から見て画面右下にある「A」を「あ」に変えました。 (キーボードの左にある半角/全角 漢字を押しました) 入力をしたところ、「あ」が「A(全角英数字)」にかわってしまいローマ字ひらがな入力ができなくなってしまいました。 また全角英数字で打った文字を消すと「A」が「あ」に戻ってしまいます。 自分なりにAltとカタカナ ひらがな ローマ字をおしてみたりcapslockの確認をしたのですが、変わりませんでした。 IME2007のヘルプも見てみましたが、調べ方が悪いのか解決方法が見つかりませんでした…。 初歩的な質問だとは思いますが、解決法をご回答していただきたいです。 よろしくお願い致します。

  • Access97:漢字を除いて全角文字の入力を禁止するには

    使う文字 漢字、半角英数、半角カタカナ、半角括弧() 禁止文字 全角英数、全角カタカナ ひらがな どうやったら入力制限出来るでしょうか?