フォームから入力された値を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で質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Java 正規表現について質問です。 カンマありの整数と、カンマなしの整数をよしとする正規表現が知りたいです。 4 2022/05/20 07:59
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データが多いとエラーになる:...
-
文字実体参照が勝手に変換され...
-
常用漢字?でない文字を判定す...
-
InputMan の imTextについて
-
特殊文字をPOSTした際の動作は?
-
半角カナから全角カナへ
-
jcode.plのconvertを使用しなけ...
-
テキストファイルの大文字を小...
-
Jcode を使った複数選択値の文...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
EXCELからCSVにすると余計なカ...
-
全角英数字の必要性が理解できない
-
Accessのテキストボックスの入...
-
封筒の宛先で縦書きの書き方
-
C#で空白行を削除する方法
-
IEからEdgeへの移行に伴うIMEの...
-
char型全角数字から、int型半角...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字実体参照が勝手に変換され...
-
正規表現でカンマを対象にする方法
-
InputMan の imTextについて
-
大文字、小文字のコードの打ち方
-
チェックボックスの複数選択の...
-
「数値文字参照への変換するソ...
-
文字化けを元に戻せますか?
-
機種依存文字の文字コード変換
-
ダブルクォート文字などをフォ...
-
unicodeの表示
-
特殊文字をPOSTした際の動作は?
-
Jcode.pmでの半角カナ→全角カナ...
-
テキストファイルの大文字を小...
-
Jcode を使った複数選択値の文...
-
PerlでUTF8をEUCに変換
-
半角カナを検出したい
-
jcodeを使ったgetcode
-
戻り値の意味がわかりません…
-
jcode.plについて
-
半角カナから全角カナへ
おすすめ情報