• ベストアンサー

入力フォームに全角・半角スペースがある場合

入力フォームに全角・半角スペースがある場合に、 データを受け取ったCGIのほうで、エラーメッセージを出そうとおもうのですが、 if ($name_l eq ' ' or $name_l eq ' '){ $errMsg .= ',Name'; $errNum++; $e_name_l = 1; } 上記のやり方だと、複数フォームにスペースが入力された時に、エラーの指事がでないのです。 どなたかご教授お願いいたします。

  • izaq
  • お礼率43% (19/44)
  • CGI
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
noname#225520
noname#225520
回答No.4

すみません、'~='ではなく、'=~'でしたね。 S-JISによる検索は確かにどうもうまくいかないケースが多いようです。jcode.pl等で一度EUC-JPへ変換すればうまく行くはずです。

izaq
質問者

お礼

有難うございました。 教えていただいた。perlメモを参考にして、 解決することができました。

その他の回答 (3)

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.3

if ( $name_l =~ /\x81\x40+|\S+/ ) { ... で、どうでしょうか? 動作確認はしておりません。 # SJISの正規表現はあまり思わしくないんですよね・・・。

noname#225520
noname#225520
回答No.2

さらに半角スペースの正規表現は'\x20'、全角スペースは シフトJISが'(?:\x81\x40)'でEUC-JPが'(?:\xA1\xA1)'ですから、文字列をシフトJISかEUC-JPに変換してから、 if ($name_I ~= '\x20'or $name_I ~= '(?:\xA1\xA1)') とやるのが良いかも。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#Character
izaq
質問者

補足

Min_2さん 素早いご返事ありがとうございます。 ご指摘の通りに指示を入れたのですが、 サーバーエラー500がでてしまい。 うまく動作しませんでした。 ちなみに、cgiの文字変換はシフトJISでした。 なにが原因でしょう?

noname#225520
noname#225520
回答No.1

if ($name_I eq ' ')ではなく、 if ($name_I =~ ' ')ではないですか?

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl1.htm#CompStrOperand

関連するQ&A

  • 入力フォームをCGIでエラーチェック→PHPにデータを送る

    CGIでフォームの入力をチェックした後、データをphp に送ろうと思います。 今まで使用してた、エラーチェックした後、データを、管理者にメールでデータを送信させるCGIをカスタマイズして、エラーチェックの後に、PHPへデータを送ることは可能なのでしょうか? どなたか御教授お願いいたします。 以下はエラーチェック後の部分です。 $errNum = chkFormInput(); fixTags(); open HTML, $template or err("$templateが開けません"); @html = <HTML>; close HTML; if ($errNum > 0){ # エラーメッセージの先頭のカンマをはずす $errMsg =~ s/^,//; $errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)"; $errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n"; }elsif (sendmail() && stockData()){ $errMsg = "ありがとうございました。以下の内容で$adminName($adminMail)に送信しました。"; } replaceTags(); showHTML(); exit();

    • 締切済み
    • CGI
  • フォームのエラーチェック

    aのフォームがhogeで、bに記入されていない場合、 bのフォームを再表示させようと思うのですが、 エラーチェック自体スルーしてしまいます。 どこの部分に問題があるのでしょうか? どなたか御教授お願いいたします。 sub chkFormInput { my $errNum = 0; if ($a eq 'hoge' & $b eq ''){ $errMsg .= ', bの項目'; $errNum++; $e_b = 1; } return 1; }

    • ベストアンサー
    • Perl
  • 入力フォームでの半角全角スペース、タブをそのまま反映したい。

    入力フォームに入力した半角スペース全角スペース 、タブをそのまま反映させて、 フォーム入力とほぼ同じ形で、Web上に表示させたい のですが。 単純に置き換えるだけですが、\r\nを<br>には 置き換えています。 スペースがよく分かりません。 また、タブは、入力フォームに入力できないのでしょ うか(フォームを移動してしまう)。 ちなみに、文字コードは、Shift_JISです。 単純に、Shift_JISだと、スペースはこうだから、 こういったタグに置き換える、といった感じが、 ありがたいです。

    • ベストアンサー
    • CGI
  • 全角、半角の区別をする。

    年齢を入力した際に、現在の設定であればアルファベットやひらがなを入力したとしてもそのままcsvにおちてしまいますが、半角数字に限定し完了できるようにするにはどうすればよろしいのでしょうか?また、半角英数にした際も教えていただければ幸いです。 #! /usr/bin/perl require "./mimew.pl"; require "./cgi-lib.pl"; &ReadParse(); # form.htmlより受取ったデータを変数に代入 $d[0]=$in{'name'}; $d[1]=$in{'sex'}; $d[2]=$in{'age'}; # 未入力チェック  if($d[0] eq ""){$error[0]="お名前を入力して下さい";} if($d[1] eq ""){$error[1]="性別を入力して下さい";} if($d[2] eq ""){$error[2]="年齢を入力して下さい";} #エラーメッセージを全部つないで $error=$error[0].$error[1].$error[2]; # エラーが無いときの処理 if($error eq ""){ # データをカンマ区切りにしてdata.csvに保存 $data=join(",",$d[0],$d[1],$d[2])."\n"; open(FH,">>./data.csv"); print FH $data; close FH;

    • ベストアンサー
    • CGI
  • 全角スペースのチェックについて

    こんにちは。 全角スペースについてのご質問です。 ある入力項目に対して必須チェックを行っております。 下記のコードはServlet内で以下のチェックを行っております。 ---------------------------------------------------------------- String name = req.getParameter("name"); bean.setName(name); if(bean.name().trim().length() == 0 || bean.name() == null){ return NO_INPUT_ERR; } ---------------------------------------------------------------- このチェックでは半角スペース『 』であればエラーとして判断してくれますが、 全角スペース『 』ではエラーとして判断してくれません。 (全角スペースはtrim()を実行しても省いてくれないため) 全角スペース『   』の判断をする場合は、 新規にクラスを作成して文字数分繰り返しチェックを入れるような処理を 自分で作成しないとチェックは出来ないのでしょうか? ご存知の方がおりましたら、ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • 入力内容の確認を行う前に$_POSTの入力値の前後から半角及び全角の空白を取り除きたい。

    一つのファイルでフォームへの入力及び入力内容の確認ができるファイル(enter.php)を作成しているのですが、入力内容の確認を行う前に入力値の前後から半角及び全角の空白を取り除きたいです。 しかし、半角及び全角の空白を取り除く部分でプログラムが動作しなくなり、なぜかわかりません。具体的には、以下の部分が問題です。 //入力された値の前後の全角及び半角スペースを取る関数。 function remove_space(&$value) { $value = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $value); } 及び //下記で入力された値の前後の全角及び半角スペースを一気に取り除きたい(ここが問題。)。 array_walk($_POST, 'remove_space'); の部分です(これらの部分を取り除くとプログラムは問題なく動作します。)。 どうやら、function remove_spaceの部分よりもarray_walk($_POST, 'remove_space'); が間違っているようなのですが、どこが悪いかわかる方おられますか? 一様、一通りのコードを下記へ載せておきます。 /////////////////////////////enter.phpファイル <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <?php //入力された値の前後の全角及び半角スペースを取る関数。 function remove_space(&$value) { $value = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $value); } if (isset($_POST['confirm'])) { $isErr = false; //下記で入力された値の前後の全角及び半角スペースを一気に取り除きたい(ここが問題。)。 array_walk($_POST, 'remove_space'); if (strlen($_POST['my_name']) == 0) { $isErr = true; $error_person = '名前を入力してください。'; } if (strlen($_POST['hobby']) == 0) { $isErr = true; $error_person = '趣味を入力してください。'; } if (strlen($_POST['school']) == 0) { $isErr = true; $error_person = '学校を入力してください。'; } if (!$isErr) { $_SESSION['input_data'] = $_POST; header('Location: https://www.example.com/mail.php'); exit; } } ?> <form action="enter.php" method="post"> <input type="text" name="my_name"> <input type="text" name="hobby'" > <input type="text" name="school"> <input type="submit" name="confirm" value="確認画面へ進む"> </form> </body> </html> ///////////////////////////// よろしくお願いします。

    • ベストアンサー
    • PHP
  • Webフォームにおける数字入力時の半角・全角について

    Webフォームで住所などを入力する時に 数字入力のところで、 ●電話番号は半角 ●住所の番地は全角 ●郵便番号は半角 となっているサイトって結構ありますよね。 正しい数字を入れているにもかかわらず、 上記の「半角・全角」の決まりを守らないと エラーになって再入力させられます。 すごくややこしいんですが、 なぜこのようになってるのでしょうか? 不親切な仕様ですよね 例えば、このようには出来ないのでしょうか?↓ ●電話番号も住所の番地も半角(または全角) に統一する。もしくは ●半角でも全角でもどちらでも良い 上記どちらかには出来ないものなのでしょうか? 上記を実現するには、プログラムの実装が難しいんでしょうか? もちろん、上記を実現していて、わかりやすいユーザインターフェースのサイトも あるにはあると思いますが。

  • 半角スペースの見分け方を教えて下さい。

    初歩的な質問ですいません。 Javaで簡単なプログラムをコーディングしているのですが コンパイルエラーになりどうやら全角スペースが含まれているようです。 ただ、何度やり直してもエラーとなります。 VistaのノートPCを利用していますが半角スペースは文字入力が "A"になっている状態で入力しています。 カーソルで何度確認しても全角文字・全角スペースはないのですが・・ 基本的なことですいません。 何かご説明頂ける方お願いします。

  • PHPでの全角、半角判断について

    PHP5にて、入力フォムから入力された文字を全角か半角か判断しています。 半角だとフラグを立ててエラーにしております。 しかし、「ソ」だけ全角で入力しても 半角と判断されてしまい困っております。 0x5c と関係していると思うのですが 対処方法がわかりません。 ご教示頂けると助かります。 //名前(性)フリガナ if($_POST['name3'] == ""){ echo "【名前(性)フリガナ】が未入力です。<BR>"; $errflg = 1; } $len = strlen($_POST['name3']); $mblen = mb_strlen($_POST['name3'], "Shift_JIS") * 2; if($len != $mblen){ $errflg = 1; } 以上、宜しくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう