
フォームから入力された値をCSVにはき出しているため、
「,」(カンマ)を禁止文字としたいのですが、
正規表現で対象にすることは可能でしょうか?
「.」(ピリオド)なら
if($TEST1 =~ /\./)
とすればよいと思うのですが、、、
if($TEST1 =~ /\,/)
ではダメですよね。
正規表現で引っかけてアラートを出す予定なのですが、
if($TEST1 =~ /\,/){
print <<END;
<script>
alert(",(カンマ)を含んでいます");
</script>
END
&error; }
他のやり方で「,」(カンマ)を禁止文字にする方法でも構いません。
また、入力フォームは8つあるのですが($TEST1~$TEST8)、
まとめて「,」(カンマ)を禁止文字にすることはできますか?
開発環境:WindowsXP(TeraTerm使用)
サーバー:HP-UX
perlバージョン:5.6.1
以上、よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
長文失礼します
#4は出勤前にあわてて書いたので 間違いがあります
仕事を終えて帰宅しましたので、じっくり調べてみました
ようやく答えらしい事が書けます。
結論から先に、、、
入力されたデータ全てから , をチェックするのなら
良くあるFORMデコード部分で
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, 'sjis');# sjisまたはEUCのどちらか
if(index($value, ',')){エラー処理をここに記述;}#この行を追加する
$FORM{$name} = $value;
}
##その理由は http://ash.jp/code/ を見て調べたところ
2Cを含むのはShift_JISでもEUCでもなく JISとUTF-16でした。
朝、調べたのはwindows付属の文字コード表でしたが
これってデフォルトがShift_JISではなくてunicodeになっているんですね
で、JISの場合 2C を含む2バイト文字は10個やそこらではないので、
URLデコード前やsjisやEUCに変換する前に 2C (1バイト文字だと , )をチェックするのは現実的ではありません。
また<FORM LANG="JA"ACCEPT-CHARSET="Shift_JIS"
のような指定をしても入力されるCHARSETはブラウザの実装しだいなので当てになりません。
したがってjcode.plなどでShift_JISかEUCに変換後チェックする必要があります。
### 追伸1: 何故#4が間違いかと言うと、上に書いた現実的でない事の他に、
2Cを含む2バイト文字と , そのものが混在した場合、チェックをスルーしてしまうからです。
### 追伸2:#2さんへ
#3にて理解できないと書きましたが、これって
FORM入力データをデコードしてハッシュに入れた後で展開して調べるって事ですね? 失礼しました。
No.4
- 回答日時:
すみません #3のスクリプトでは、Shift_JISの場合
倬?听のような2Cを含む文字を入力されると誤動作しますね。
これを回避するには
if($valueに倬?听などの2cを含む文字があれば何もしない
elsif(,を含む場合){エラー処理}
みたいな形しかオイラには思いつかない
もっとスマートな形があると思うのだが、、、
No.3
- 回答日時:
/,/ でもOKですよね。
サンプル
$u='a,b,c,d,e,f';
$u =~/,/;
print "\$&=$& \$u=$u<P>\n";
$u =~s/,//g;
print "\$&=$& \$u=$u";
で、いっぺんにチェックするのは
FORM入力データコーディングのループ中で
$value =~ s/%([a-f\d]{2})/pack("C", hex($1))/ieg;# と言う行があるはずなので、次の行に
if(index($value, ',')){&error(",は駄目よ ");last;}# sub errorに飛ぶ 等と追加する
とすれば良いかと思います。
と言うか、、、#2さんのソースを見て俺には理解できなかったのだが
, をFORMで送るとURLエンコードされて %2C になるはずだが、その点は大丈夫なんですか?
perl離れて何年も経つので勘違いしてたらごめんなさい
No.2
- 回答日時:
存在するかどうかなので、
index($TEST1, ',')
の方が早そうです。
フォームからということなので、
変数をハッシュに入れ込んで、for文で回して
フラグをたてて、エラー処理をすると
コーディングの行数が減りそうですね。
my %form; #= $form{"$key"} = $val;の様な感じで使用する。
my $flg = 0; #= フラグ
foreach my $key (keys %form) {
if ( index($form{"$key"}, ',' ) {
$flg++;
last;
}
}
if ( $flg > 0 ) {
#= エラー処理
}
ってかんじでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
InputMan の imTextについて
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
[VBA][Excel]クリップボードか...
-
英数字のみ全角から半角に変換
-
文字コードの%E3%80%とは何です...
-
VBA 文字に半角が含まれて...
-
IEからEdgeへの移行に伴うIMEの...
-
カンマ区切り
-
WORDで改ページすると時々グレ...
-
EXCELからCSVにすると余計なカ...
-
エクセルにペーストする際にカ...
-
PowerShellでテキストの空白行...
-
各項目がダブルクォーテーショ...
-
エクセルの1セル内の文字列操作。
-
C#でcsvファイルの列を入れ替え...
-
VBA EXCEL あるセルの中の一...
-
コマンドプロンプト 全角を含ん...
-
Excel VBAでPDFファイルをMicro...
-
xmlファイル内の文字列置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
文字化けを元に戻せますか?
-
nkfとjcodeの使い方の違いについて
-
正規表現
-
半角カナから全角カナへ
-
チェックボックスの複数選択の...
-
Perlでのマッチング処理について
-
中国語のコードについて
-
utf-8のマシンでsjisのデータフ...
-
文字実体参照が勝手に変換され...
-
unicodeの表示
-
PerlでUTF8をEUCに変換
-
CASL2の仕様での英単語の格納方法
-
頭文字を大文字にしたい
-
文字をISO Lathin 1 文字コード...
-
textareaでHTMLタグを使いたい
-
常用漢字?でない文字を判定す...
-
「数値文字参照への変換するソ...
-
アルファベットの変換?
-
デコードフォームについて。
おすすめ情報