フォームの入力をCGI(Perl)でチェックするとき、
全角の漢字、カタカナ、ひらがなでの入力以外は禁止にしたいです。
どなたかいい方法をご存知でしょうか?
とりあえず、現在は、
jcode.plで全角英数字⇒半角英数字に変換
フォームに入力された文字列を一文字(半角2文字)ずつ抽出して、
$a=~ s/([^\w ])/'%' . unpack("H2", $1)/eg;
でエンコードしたものが%を含んでいるかどうかで判別してます。
でもこれだと全角英数字と半角英数字しかシャットアウトできません。
記号文字なども入力出来ないようにしたいです。
よろしくお願いします。
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 !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~');
---
ご回答ありがとうございました。
&jcode'tr(↓の方)を自分なりに修正して使ってみたところ、
うまくいっているみたいです。
どうもありがとうございました。
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] に変えてください。
No.1
- 回答日時:
文字チェックをPerlで行うなら正規表現を用います。
すでにチェックで使われているようなので詳しくは省きます。
もし解らなかったら「正規表現」で検索すればたくさん出てきますよ。
正規表現で文字のコードから半・全角、平仮名、片仮名を判断できます。
下記URLのページにサンプルがたくさん載ってますので参考にしてください。
文字の判定の記述がそのまま載っていますのでそのままコピーして使えると思います。
参考URL:http://www.din.or.jp/~ohzaki/regex.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- Excel(エクセル) exel 漢字・英数字混在セルの入力規則 5 2022/04/03 11:08
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
number 改行が追加できない
-
エクセルで集計したい。
-
htmlからパラメータで、cgiに渡...
-
生成AI画像について
-
フォームを再送信しますか?
-
CGIって何ですか?簡潔に教えて...
-
ホームページの事でおしえてく...
-
ホームページでCGIのフォームを...
-
CGIが読み書きするデータファイ...
-
(フリーの)ツリー掲示版CGI、...
-
cgiの注釈が出来ない
-
apacheでPerl CGIが作動せず、5...
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで集計したい。
-
フォームを再送信しますか?
-
apacheでPerl CGIが作動せず、5...
-
ホームページでCGIのフォームを...
-
生成AI画像について
-
/bin/awk '{print $5}'ってどう...
-
入力フォーム(電話番号)
-
(フリーの)ツリー掲示版CGI、...
-
古ーくからフリーのtree.cgi掲...
-
VBAで条件から範囲を指定して色...
-
ホームページにメールフォーム...
-
一番簡単なCGI,掲示板の設置教...
-
CGIって何ですか?簡潔に教えて...
-
サーバーのエラーでおしえてく...
-
サイト訪問者の情報を取得したい
-
htmlからパラメータで、cgiに渡...
-
CGIで出力するhtmlの<!DOCTYPE ...
-
cgiからsendmailを送信で文字化け
-
POSTメソッドの最大容量について
-
ホームページにCGIを設置したの...
おすすめ情報