• ベストアンサー

テキストエリアでの行数を調べる

<script language="JavaScript"><!-- function check() { txt = document.myFORM.myTEXT.value; n = txt.match(/\r/g); if (n) len = n.length + 1; else len = 1; alert(len+"行です"); } // --></script> <form name="myFORM"> <textarea rows="3" name="myTEXT"></textarea> <input type="button" value="Check" onClick="check()"> </form> これで調べられると書いてあったのですがページエラーが出てしまいます 『n = txt.match(/\r/g);』の部分 ○UNIXの改行コードは0x0Aの1バイト(正規表現では\n)となります とあったので『n = txt.match(/\n/g);』として試してみたのですがこちらでもページエラーが出てしまいます ○『n = txt.match(/\r/g);』を『n = 2;』などのようにしたら alertはでるのですが『Nan行です』と表示されます サンプル紹介されているサイトでは改行3回だと『4行です』のように表示されるのですが自分でCGIファイルに組み込んでみると表示されません(><) どうしてかお分かりになる方いらっしゃいますでしょうか?

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

  • ベストアンサー
回答No.6

>ANo.5回答 CGIスクリプト(アプリケーション)に問題があります。 \はエスケープコードです。 エスケープコードを「表示」したい場合は、それをエスケープさせて、「エスケープコードとして認識させない処理」が必要です。 詳しくはCGIに使用している言語と「エスケープ」または「エスケープコード」で検索してみてください。 「エスケープシーケンス」で調べてもいいかも知れません。 > ANo.3 回答 > ページを表示するときに『'/'がありません』が なるほど、たしかにこのエラーになりますね。 > javascriptの構文チェックする方法ってあるのでしょうか? 基本的にはブラウザのエラーメッセージを参考にします。 IEは1行でごく簡単なメッセージしか表示出来ませんが、 OperaのコンソールやFirefoxのエラーコンソールや、FireBugというアドオン(プラグイン)では、より詳しいメッセージが表示されますので、 私はこれらを使うことの方が多いです。 CGIから出力する場合は > ANo.5 > CGIスクリプトのソースの内容と異なることがあります。(特にCGIスクリプトで動的に生成している場合) と書いているとおり、あらかじめ動作確認済みのスクリプトとCGIスクリプトから出力したコードの差違を直せば 余程のことがない限り動作します。

leap_day
質問者

お礼

できました~~ 『\』はエスケープコードというのですね(^^) 『表示』などそのまま実行したら違う文字になってるから文字化けした文字を\で囲めば文字化けが抑制できると安易な認識しかしてなくて意味も知らずに使ってました(滝汗) 質疑応答の中で色々なことを勉強させてもらいました 回答を頂いた皆様方、お世話になりましたm(--)m また何かありましたらよろしくお願いします

その他の回答 (5)

回答No.5

> n = txt.match(/\r/g); この部分を、 n='\r'; にしたときにも同じエラーメッセージが表示されますか? 同じメッセージが表示されるなら、n = txt.match(/\r/g);これに問題があり、エラーメッセージが変われば別の場所に問題があります。 私が試したのは、UTF-8で記述し、ブラウザの文字コードShift_JISで表示したときにエラーが出ました。 これは、UTF-8の"す"の3バイト目が0x99ですから、 Shift_JISではエスケープコードとして処理されるため、「"行です"」の2つ目の"がエスケープされていることが原因です。 > 参考にしたサイトに改めて訪れてみたところhtmlファイルで作ってあるみたいなのですがcgiファイルだと無理なのですかね~~(@@;) CGIは関係ありません。 ブラウザで表示して、ブラウザの「ソースを表示」で確認してください。 それが、ブラウザが実行しているJavaScriptです。 CGIスクリプトのソースの内容と異なることがあります。(特にCGIスクリプトで動的に生成している場合)

leap_day
質問者

お礼

お世話になります >『n='\r';』にしたときにも同じエラーメッセージが表示されますか? メッセージは変わりました(><) 『変更前』:14行16文字 '/'がありません  『変更後』:14行4文字 終了していない文字列型の定数です となりました >ブラウザの「ソースを表示」で確認してください。 確認してみたところ・・・ n = txt.match(/\r/g); の部分が n = txt.match(/ /g); となってました(--;) 『n='\r';』だと n=' '; これが原因ですかね?ソース表示した場合丁度14行目と15行目になりますので・・・

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.4

レスありがとうございました。 うん、解決への道が な~んとなく うっすらと見えて来ましたねぇ… というわけで、もうすこし私の「おたずね」に お付き合いくださいまし。 (スミマセン[汗]) さて、まずお答えから。 (1)『セキュリティー保護のため…で制御されています』と出ているということですが、これはエラーではありません。今回のような、自PCで、自作のhtmlファイルを開く場合は この黄色いバーをクリック→「ブロックされているコンテンツを許可」をクリック→「アティブコンテンツを実行しますか?」で「はい」をクリック でOKです。 ここからは おたずね です。 (2)「</textarea>を加えてやってみたのですがやはりダメ」ということですが、具体的にどういうエラーになったのでしょうか(表示されたエラーメッセージは何)? (3)「…test.htmlでは作動するみたいなのですがtest.cgiではエラー」ということですが、これは「ご質問に有った JavaScript コードを、本来使いたい cgi スクリプトの中へ組み込んだ」のでしょうか、それとも「ファイル名を test.html から test.cgi に変更しただけ」なのでしょうか? お手数ですが、よろしくお願いいたします。

leap_day
質問者

お礼

お世話になります (2)ページ全体にエラーが表示されるのではなく下のステータスバー(?)(名前が出てこない・・・(--;))に黄色い△に『!』で『ページでエラーが発生しました』と出るのです これはjavascriptが正常に機能してないときに出るエラーですよね? javascriptの構文チェックする方法ってあるのでしょうか?cgiはコマンドプロンプトでできるみたいですけど・・・ それで昨日ちょっとググッてIEでブラウズエラーチェックができるみたいなのでやってみました 結果はNo.3の方のお礼に書いた通りなのですが分かりますでしょうか? (3)javascriptはまだ勉強中の身(2,3ヶ月程度)なので新しい構文は見てもすぐには分からないのでtest.cgiとtest.html両方に組み込んで色々試してから使ってます(^^) test.cgiはheader,footer,decode,error,lock,unlockなど基本的なものを書き込んだのをBASEにしてて<body>部だけ変更してます いつもは他の方の書かれたスクリプトをそのままコピペして自分用に(画像のパスやURLなど)変えてやれば機能するのですがこれだけは何処を変えてやればいいのかまったく分からなくて質問させてもらいました >「ファイル名を test.html から test.cgi に変更しただけ」 これはさすがにcgiとして機能しないのは分かりますのでやってません(笑) 上で書いたように<body>部にソース文を貼り付けてやってます(^^) 追記 参考にしたサイトに改めて訪れてみたところhtmlファイルで作ってあるみたいなのですがcgiファイルだと無理なのですかね~~(@@;) http://www.openspc2.org/reibun/javascript/form_textarea/006/

回答No.3

> ページエラーが出てしまいます エラーの内容(エラーがあった行数)を見てみて下さい。 text.matchの行ではなく、alert()の行が表示されていると思います。 行数の数え方がブラウザごとに違うので、それぞれ違う行数が表示されますが、指し示している部分は同じです(と思います) おそらく文字コードと思います。 CGIからの出力はUTF-8で、ブラウザはShift_JISで表示しようとしていませんか? <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> などを書いて、UTF-8として表示するようにしてみてはいかがでしょうか。 > </textarea>有る無しでコード指定(5種類)試してみたのですがそれもダメでした(><) </textarea>がないとHTMLの文法エラーですから、 表示出来ないか、document.myFormやdocument.myForm.myTEXTが存在しない、ということもあり得ます。 コード指定するのはいいですが、保存したコードと指定しているコードは一致していますか?

leap_day
質問者

お礼

回答ありがとうございます >エラーの内容(エラーがあった行数)を見てみて下さい javascriptのデバック方法分からなかったのでIEのブラウズエラーチェックを試してみたところ・・・ ページを表示するときに『'/'がありません』が checkボタンを押すと『オブジェクトを指定してください』と出ます 行数も14行目と22行目と別の場所を示すのでわからなくなってます 『n = txt.match(/\/r/g);』とすると『15行目構文エラー』となったので 『txt = document.myFORM.myTEXT.value;』と『<input type="button" value="Check" onClick="check()">』(?)だと思うのですが・・・ >おそらく文字コードと思います。 header,footer,decoad,errorなどの基本構文はモデルとして別に保存していていつも内容だけを変えています 他のものは正常に作動するのでどこか構文がおかしいと思うのですが・・・ 上のエラーで推測できないでしょうか?

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

こんにちは。 まず、おためしいただきたいことがあります… 以下のサンプルを「 test.html 」などのファイル名をつけてお手元のPC上に保存し、ダブルクリックで開いてみてください。  もしOKならば、CGIへ組み込んだときに何かが欠けたりダブったりしている可能性がありますのでチェックしてみてください。NGなら、ファイル保存をするときの文字コードを変えてみてください。 ---------------------------------------------- <html><head> <script language="JavaScript"><!-- function check() { txt = document.myFORM.myTEXT.value; n = txt.match(/\r/g); if (n) len = n.length + 1; else len = 1; alert(len+"行です"); } // --></script> </head> <body> <form name="myFORM"> <textarea rows="3" name="myTEXT"> <input type="button" value="Check" onClick="check()"> </form><body></html> ---------------------------------------------- あと、n=2 とした場合に NaN が出る理由ですが、これは以下の通りです: もとのスクリプト「n = txt.match(/\r/g);」で、n に値がセットされるのですが、n に入るのは「何回マッチしたか」という「数値」ではなく、マッチした結果が順に配列として入ります。だから n=2 としてしまうと次行のif文が実行されず(条件式そのものがエラーになり意味をなさない)len に数値がセットされないので、NaN になるのです。 ですから、マッチした回数を出す場合は、次行の if 文にあるように「 n.length 」としてやる必要があります。 追加でご質問あれば、お気軽にどうぞ。

leap_day
質問者

お礼

回答ありがとうございます そのままコピペしてやったら<textarea>内に<input>以降のソースが入ってしまったので </textarea>を加えてやってみたのですがやはりダメでした >NGなら、ファイル保存をするときの文字コードを変えてみてください。 </textarea>有る無しでコード指定(5種類)試してみたのですがそれもダメでした(><) htmlファイルをダブクリで開くと情報バーに 『セキュリティー保護のため、コンピューターにアクセスできるアクティブコンテンツはInternet Explorer で制御されています』 と出るのですがこれは関係ありますか? 送る前にもう一度確かめてみたのですが・・・ ダブクリではなくURLを直接入力するとtest.htmlでは作動するみたいなのですがtest.cgiではエラーになります 分かりますでしょうか?

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.1

ふむ。コードはまちがっていないと思いますね。 txt = document.myFORM.myTEXT.value; を var txt = document.myFORM.myTEXT.value; に差し替えたらどうなりますか?

leap_day
質問者

お礼

回答ありがとうございます 差し替えてやってみたのですがやはりページエラーになってしまいます(><)

関連するQ&A

  • 行数の制限

    function check(){ txt = document.myFORM.text.value; n = txt.match(/\r/g); len = n.length + 1; if(len > 60){ alert(len+"行もあります。\n改行は60行までです。"); return false; }else{ return turn } } これだとウインドウを出るのですが、『制限』と言った形にはならずそのままプログラムが続行されます。 どうすればプログラムの終了が出来るのでしょうか? 初心者なんですみません^^;

  • テキストエリアの制限字数以上の文字を消したい

    いつもお世話になっております。 現在、JavaScriput勉強中の初心者です。 テキストエリアにJavaScriptでmaxlength機能を付け制限字数を超えると警告ダイアログを出す ようにしたのですがコピペで制限字数を2文字以上超えるとBackSpaceで1文字消すたびに 警告ダイアログが出るというバグが起きてしまいます。 そこで警告ダイアログのOKボタンを押すと制限字数以上の文字は消すプログラムが組みたい のですがどうすればよいですか? あと残り入力可能文字カウンタをsetIntervalを使ったものに変更したら警告ダイアログすら表示 されなくなってしまいました・・・よろしくお願いします。 ●変更前 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>文字のカウント</title>   <script type="text/javascript"><!--     function ShowLength( str ) {       document.getElementById("inputlength").innerHTML = 20 - str.length;     }     function check() {       txt = document.myFORM.myTEXT.value;       n = txt.length;       if (n > 20) alert("20文字以内にしてください");     }     // --></script> </head> <body> <form name="myFORM"> <textarea cols="46" rows="5" name="myTEXT" onkeyup="ShowLength(value); check();" onmouseout="ShowLength(value); check();"></textarea><br /> あと<span id="inputlength">20</span>文字入力できます<br /> </form> </body> ●変更後 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>文字のカウント</title>   <script type="text/javascript"><!--     (function(){       var intervalId = setInterval(function(){        var n = 20 - document.getElementsByName("myTEXT")[0].value.length;        if(n < 0) n = 0;        document.getElementById("inputlength").innerHTML = n;       }, 100);     })();     function check() {       txt = document.myFORM.myTEXT.value;       i = txt.length;       if (i > 20) alert("20文字以内にしてください");     }     // --></script> </head> <body> <form name="myFORM"> <textarea cols="46" rows="5" name="myTEXT" onkeyup="ShowLength(value); check();" onmouseout="ShowLength(value); check();"></textarea><br /> あと<span id="inputlength">20</span>文字入力できます<br /> </form> </body>

  • 入力文字のバイト数

    いつも参考にしております。 入力文字のバイト数のカウントについて質問をさせていただきます。 入力フォームなどで、入力文字数の制限をしたいと考えております。 文字を入力するたびに、バイト数がテキストボックスに常に 表示されるようにしたいと考えております。 以下を参考にできるのではないとか思っておりますが。 <script language="javascript"> <!-- function check() {  txt = document.myFORM.myTEXT.value;  n = txt.length;  if (n > 10) alert("10文字以内にしてください"); } --> </script> <form name="myFORM"> <textarea rows="3" name="myTEXT" onChange="check()"></textarea> </form> ご教授お願いいたします。

  • テキストエリアに入力された語に特定の語句を附加したい

    「特定の語句+","+テキストエリアに入力された語」をフォーム送信したいと思っています。 (1)テキストエリア1(識別名=NAME1)に入力された語を調べて警告メッセージを発し、(2)この警告メッセージとテキストエリア1に入力された語を、「,」で区切った1つの文字列(識別名=NAME2)としたうえで(3)送信したいと考えています。 そこで、試行錯誤しながら、一応、下のように記述はしてみたのですが、(テキストエリア1に数字を入力した場合を除き)上手く動作しません。 つきましては、恐れ入りますが、どなたか、正しい記述をご教授いただけませんでしょうか。JAVAスクリプト全くの初心者ですが、何卒よろしくお願いいたします。 <head> <script language="JavaScript"><!-- function check() { //(1)条件にマッチしてるか判断 txt = document.myFORM.NAMAE1.value; //テキストエリア1に入力された語をtxtに data=txt.match(/a[^\&\"]*d/im); //txtが条件にマッチしてるか判断 alert1="メッセージ"; if (!data) {alert(alert1); //マッチしていない時は警告メッセージを表示 //(2)警告メッセージとテキストエリア1に入力された語を、とりあえずテキストエリア2に入れようと考えました。 n=0; n=eval(document.myFORM.NAMAE1.value); //とテキストエリア1に入力された語をnに document.myFORM.NAMAE2.value=alert1+","+n+","; //テキストエリア2に警告メッセージとnを入れようとしています //(3)そして、テキストエリア2内の語を送信 document.myFORM.submit(); } } // --></script> </head> <body> <form name="myFORM" method="post" action="**.cgi" > <A onclick="check()"><IMG src="1.gif"></A> <textarea name="NAMAE1"></textarea></td> <textarea name="NAMAE2"></textarea> </form> </body>

  • 2つのJavaSを使う場合・・・

    こんにちは、他の質問もさせていただいているのですが、こちらもお願いいたします! 私はホームページに関して素人なのですが、WEBで例文などをコピーしてきて利用させて頂いています。しかし元が素人なのでわからない事が多く・・・ 例えば、 <script language="JavaScript"><!-- function check() { txt = document.myFORM.TEST.value; n = txt.length; if (n > 10) alert("10文字以内にしてください"); } // --></script> </head><body><form name="myFORM"> <textarea rows="3" name="myTEXT" onChange="check()"></textarea> </form></body></html> こういうテキストボックの入力文字を規制するスクリプトと、 <SCRIPT language="JavaScript"> <!-- function Check(){ if(document.myform.TEST.value==""){ alert("コメントを入力してください。"); return false; } return true; } // --></SCRIPT> という未入力だった場合アラートを出すスクリプトを2つ使いたい時はどのように設定すればいいのでしょうか? <SCRIPT language="JavaScript"><!-- の下に両方書きますよね?で、両方とも function check() というのを使うようなのですが・・・。 素人で全くわかりません。やはり勉強しようかと思いますが、とりあえず、上記を ご存知の方、よろしくお願いいたします!

    • ベストアンサー
    • HTML
  • テキストエリアの入力値からチェックボックスのON・OFF切り替え

    テキストエリアからフォーカスが外れた際、テキストエリアに入力された文字があればチェックボックスをONに、何もない場合はOFFにしたいです。 <HTML> <BODY> <SCRIPT language="javascript"> <!-- function Check(AAA,BBB) { var cTxt; cTxt = "txt" + AAA; item_txt = eval('document.form1.' + cTxt + '.value'); item_txt2 = item_txt.replace(/ /g,""); item_txt2 = item_txt2.replace(/ /g,""); if (!item_txt2){ alert("チェックを外す"); } else { alert("チェックを付ける"); } } //--> </SCRIPT> <FORM name="form1"> <TABLE> <TR> <TD><TEXTAREA name="txt029" rows="2" cols="20" onblur="Check('029','1')"></TEXTAREA></TD> <TD><INPUT type="checkbox" name="chk[]" value="029"></TD> </TR> <TR> <TD><TEXTAREA name="txt121" rows="2" cols="20" onblur="Check('121','2')"></TEXTAREA></TD> <TD><INPUT type="checkbox" name="chk[]" value="121"></TD> </TR> </TABLE> </FORM> </BODY> </HTML> <TR>~</TR>はPHPで書き出しをしており、行数は都度変化します(1行~20行)。 1つの<TR>~</TR>で、TEXTAREAのname下3桁・Checkの1つ目の引数・checkboxのvalueは全て同じ値が入ります(値は変化)。 Checkの2つ目の引数は書き出した順に0から振るようにしています。 この記述だと2つ目の引数は活用できてないのですが…使い道があるかと思って書いてはいるのですが結局わからなくてそのままになってます。 色々考えてはみたのですが、どのように対応するチェックボックスを指定していいのかがわかりません。 是非ご教授いただきたいです。

  • ボタンをクリックするとテキストエリアに文字が表示される。

    はじめまして 下記内容のJavaScriptを見つけたのですが これをどうにか違うものにしたいのです。 <html> <head> <TITLE>テキストエリアに複数項表示する</TITLE> <script language="JavaScript"><!-- function setChars() { str1="テキストエリアに"; str2="複数項にわたる文字を"; str3="表示します。"; document.myFORM.myTEXT.value=str1+"\n"+str2+"\n"+str3; } /--></script> </head> <body> <form name="myFORM"> <textarea name="myTEXT"rows="10"></textarea><br> <input type="button"value="複数行表示"onClick="setChars()"> </form> </body> </html> ------------------------------------------------ 例えば (月・火・水・木)とそれぞれのボタンがあるとします。 そのボタンを押すと、複数行テキストへ 月曜→○○○○ 火曜→○○○○ 水曜→○○○○ 木曜→○○○○ というように、表示させたいのです。 また、複数行テキストに入力された文字が消えず改行されて表示させたいのです。 自分でもいろいろと試してみたのですが、頭が悪く、全く思ったようにできません。 お忙しいところ大変申し訳ありませんが、 上記に記載した内容のスクリプトはありますでしょうか。 ご返答いただけると幸いです。

  • 選択フォームへの追記について

    現在、下記のように一つのフォームの場合は、 ボタンを押すと追記されますが、 複数のフォームがある場合に、 選択されているフォームへ、 追記するには、どうすればよろしいでしょうか、 よろしくお願いいたします。 <html> <head> <script language="JavaScript"><!-- CR = String.fromCharCode(13); function setData(param) { txt = document.myFORM.myTEXT.value + param + CR; document.myFORM.myTEXT.value = txt; } // --></script> </head> <body> <form name="myFORM"> <input type="button" value="月曜日" onClick="setData('月')<br> <input type="button" value="火曜日" onClick="setData('火')"><br> <textarea rows="9" cols="20" name="myTEXT"></textarea><br> </form> </body> </html>

  • 半角英数字の判別

    お世話になります テキストフィールドにおいて半角英数字のチェックをしたいのですが・・・ 例えば『012ab』のような場合、 <script Language="JavaScript"> <!-- function checkText() { txt = document.myFORM.moto.value; if (txt.match(/[^a-z|^A-Z]/g)) alert("アルファベット以外が含まれてます"); } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkText()"> </form> では数字が入力されてるとalertされます function checkNum() { txt = document.myFORM.moto.value; for (i=0; i<txt.length; i++) { c = txt.charAt(i); if ("0123456789".indexOf(c,0) < 0) { alert("数値以外が含まれてます"); return; } } } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkNum()"> </form> ではアルファベットがあるとalertされてしまいます この2つをどのように組み合わせれば半角英数字以外であればalertされるようになるのでしょうか?

  • テキストエリア内で改行するには。

    次のスクリプトを実行すると、テキストエリア内に 01234560 と数字が表示されますが、これを 0 1 2 . というように改行も含めてテキストエリアに出力するにはどうすればよいでしょうか。 ¥nという文字を使用するのでしょうか? <html> <head> <script language="JavaScript"> <!-- var textA="" function my1() {for (i=0;i<11;i++){textA=textA+new String(i)} document.form1.text1.value=textA;} //--> </script> </head> <body> <form name="form1"> <textarea name="text1" size="10"></textarea> <input type="button" value="CLICK!" onClick="my1();"> </form> </body> </html>

専門家に質問してみよう