
フォームから入力された値を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ランキング
-
Perlの文字コード変換について
-
文字コード
-
文字コードEUC→SHIFT-JISにする...
-
PerlでUTF8をEUCに変換
-
unicodeの表示
-
デコードフォームについて。
-
マッチングアプリで新しくアカ...
-
Perlでさらに気の利いた文字列...
-
VBA 文字に半角が含まれて...
-
シェルで文字列を置換したい。
-
この正規表現の意味は?
-
Excel2003 IF関数の条件指定方法
-
EXCELで、一つのセルに書かれた...
-
マイク取得音声のテキスト変換
-
同一連続文字の改行(テキストエ...
-
特定の文字を削除したい
-
エクセルで見えないが、何かが...
-
JISの全角判定処理について
-
cmdの日本語入力
-
utf-8コードの指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
文字実体参照が勝手に変換され...
-
チェックボックスの複数選択の...
-
もっとも初歩的なデータの渡し方を
-
常用漢字?でない文字を判定す...
-
機種依存文字の文字コード変換
-
色の指定
-
formデータのデコード「s///」...
-
半角と全角の文字数カウント方法
-
Perlの初歩
-
正規表現でカンマを対象にする方法
-
特殊文字をPOSTした際の動作は?
-
次ページ処理で途中つまりました
-
文字化けを回避したい
-
ダブルクォート文字などをフォ...
-
index関数と英語文字
-
nkfとjcodeの使い方の違いについて
-
SJISに関する少々複雑な問題
-
パターンマッチ変換について
-
戻り値の意味がわかりません…
おすすめ情報