[020-150]を020jpg 021jpg・・・と展開したい。

このQ&Aのポイント
  • [020-150]の020部分の桁数をしらべて。その桁数-Iの桁数=頭につける0の数
  • 正規表現を使用して、[020-150]の範囲を取得し、ループさせることで、[020.jpg, 021.jpg,..., 150.jpg]という一覧を表示できます。
  • 以下のスクリプトを使用することで、[020-150]を[020.jpg, 021.jpg,..., 150.jpg]と展開することができます。」
回答を見る
  • ベストアンサー

[020-150]を020jpg 021jpg・・・と展開したい。

http://www.okweb.ne.jp/oshiete_new.php3 の質問のつづきです。 http://www.aaa.com/xxx[020-150].jpg を http://www.aaa.com/xxx020.jpg http://www.aaa.com/xxx021.jpg 以下このようなものが、 http://www.aaa.com/xxx150.jpgになるまで 一覧表示される。 このようなスクリプトを教えてください。  forを用いてループさせるのは分かるのですが どのように頭に”0”をつけて桁あわせすればよいかわからなくて。 http://www.okweb.ne.jp/oshiete_new.php3 を見ながら自分なりに考えているのですが、 [020-150]の020部分の桁数をしらべて。 その桁数-Iの桁数=頭につける0の数・・・・ Iは forの中のループに使用される数で・・・ えーっと、すいません、混乱してます。  ちなにみ桁をあわせない場合は次のようになります。 zzzzzzさん、大変お世話になりました。 正規表現の便利さを実感しました。 ************************************* <HTML> <HEAD> <TITLE>URLを展開</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- Hide script from old browser function my1(str) { if (str.match(/^(.*)\[(\d+)\-(\d+)\](.*)$/) != null) { var win = window.open(); for (var i=Number(RegExp.$2); i<=Number(RegExp.$3); i++) { win.document.write(RegExp.$1 + i + RegExp.$4 + "<BR>\n"); } } else { alert("式が展開可能ではありません。"); } } // end Hiding --> </SCRIPT> </HEAD> <BODY BGCOLOR="#D0D0D0"> <FORM NAME="form1"> <input type="text" name="text1"value="" size="60"> <input type="button" value="クリック" onClick="my1(document.forms['form1'].text1.value) "> </FORM> </BODY> </HTML> *************************************

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

  • ベストアンサー
  • zzzzzz
  • ベストアンサー率61% (70/113)
回答No.1

数値を桁指定して文字列に変換する、という関数を作成すると良いと思います。 例えば、 function numberToString(num, fig) { var tmparray = new Array(fig); var str = num.toString(10); for (var i=str.length; i<fig; i++) { tmparray[i] = "0"; } return (tmparray.join("")+str); } のようにします。 これはnumが正の数であることを前提にしていますが、今回は問題ありません。 その上で、RegExp.$2とRegExp.$3が同じ桁数かどうかによって処理を分ければ良いことになります。従って、 function my1(str) { if (str.match(/^(.*)\[(\d+)\-(\d+)\](.*)$/) != null) { var win = window.open(); if (RegExp.$2.length == RegExp.$3.length) { var fig = RegExp.$2.length; for (var i=Number(RegExp.$2); i<=Number(RegExp.$3); i++) { win.document.write(RegExp.$1 + numberToString(i, fig) + RegExp.$4 + "<BR>\n"); } } else { for (var i=Number(RegExp.$2); i<=Number(RegExp.$3); i++) { win.document.write(RegExp.$1 + i + RegExp.$4 + "<BR>\n"); } } } else { alert("式が展開可能ではありません。"); } } とすればOKです。

norinori555
質問者

お礼

zzzzzz様  投稿してすぐ回答をいただきありがとうございました。 お答えを紙に書き出し今日一日読んでいました。 なるほど文字列にする方法がありましたね。それから関数を用いてリターンで返すという方法というのは、全く思いつきませんでした。 驚きの連続です。 ありがとうございました。 前回の質問は http://www.okweb.ne.jp/kotaeru.php3?q=247951 でした。

関連するQ&A

  • [1-3].jpgを 1jpg 2pg ・・・のようにしたい。

    こんにちは。 http://www.aaa.com/xxx[1-3].jpg というアドレスを http://www.aaa.com/xxx1.jpg http://www.aaa.com/xxx2.jpg http://www.aaa.com/xxx3.jpg のようにするスクリプトを教えてください。 splitを使用して分解して、[1-3]を取り出して、joinでくっつけて、 document.write()で  http://www.aaa.com/xxx1.jpg http://www.aaa.com/xxx2.jpg http://www.aaa.com/xxx3.jpg と表示しようと考えたのですが、具体的なスクリプトがわからなくなりました。 上記のようなことをしてくれるフリーのソフトがあるようですが、スクリプトの学習をしようと思いますのでよろしくお願いします。

  • 複数対応できるチェックボックスONでのテキストフィールド有効化

    nameでなくidから値を取得する方法を模索中です。 下記のようにしてみましたが、 「オブジェクトでサポートされていない~」とでます。 どのあたりに問題がありますでしょうか? <script type="text/javascript"> function fchk(obj,id) { var frm=obj.form; if(obj.checked==true) { /* テキストボックスを有効化(false)*/ for(var i=1; i<=2; i++){ frm.getElementById("t"+i).disabled=false; } } else { for(var i=1; i<=2; i++){ /* 無効化する前に、入力値をクリア */ if(id=='t'){ frm.getElementById("t"+i).value=""; } /* 無効化(true) */ frm.getElementById("t"+i).disabled=true; } } } </script> <form name="form" action="#"> <input type="checkbox" id="c1" name="aaa" value="オン" onclick="fchk(this,'t')" /> <br /> <input type="text" name="aaa" id="t1" value="" size="20" disabled/> <input type="text" name="aaa" id="t2" value="" size="20" disabled/> </form>

  • select要素のvalueを配列で取得したいです

    select要素のvalueを配列で取得したく、下記のサンプルを動かそうと試みました。 <html> <head></head> <body> <form> <!-- ここに<select name="c1">~<select name="c20">の20個のselectがあるとする --> </form> <input type="button" value="はい" onclick="test(this.form)"> <script type="text/javascript"> function test ( form ) { var values = new Array(); for ( var i=0; i < 20; i ++ ) { var elm = form.elements['c'+i]; values[i] = elm.options[elm.selectedIndex].value; } } </script> </body> </html> このようなサンプルを動かそうとしたのですが、 var elm = form.elements['c'+i];のところの['c'+i]が正しくないようで 「elm is underfind」というエラーが出てしまいます <script> function myForm (form) { var values = new Array(); for ( var i=0; i<20; i++ ) { var elm = form.elements[i]; values[i] = elm.options[elm.selectedIndex].value; document.write(values[i] + "<br />"); } } </script> インデックス名を'c'+iからiにすると取得できるのですが、 ブラウザが読み込みをやめない状態になってしまいます。 select要素のnameはc1から始まりc20と何も換えていません。 何が間違っているのでしょうか。

  • 初歩サンプル(値の型?)でつまづいてます。。

    HTMLとスタイルシートしかわからず、初のプログラミング言語としてJavascriptを選びました。 とりあえず入門書籍のサンプルを見ながら勉強しているのですが、 さっそくfor文というか、値の型?で混乱してます。。 【Javascript部分】 function doClick(){ var str = ""; //←(1) var n = document.form1.select1.options.length; for(var i = 0;i < n;i++) if (document.form1.select1.options[i].selected)    str += document.form1.select1.options[i].value + ","; //←(2) var str = "選択項目:" + str ; document.getElementById("showText").innerHTML = str; } 【HTML部分】 <p>※テスト用ページ</p> <div name="showText" id="showText">(※未設定)</div> <form name="form1"> <select name="select1" size="3" multiple> <option value="あいうえお">あいうえお</option> <option value="かきくけこ">かきくけこ</option> <option value="さしすせそ">さしすせそ</option> </select> <input type="button" value="送信" onClick="doClick();"> </form> options.lengthで配列の総数を数えて、真偽値を調べfor文で繰り返し、結果を反映させる部分はわかります。 わからない部分は、 (1)「var str = "";」の「""」は空の文字列を代入?ということでしょうか? 試しに消し見ると「undefined」が記述されるのですが…… 型を定義してないと起こる?問題のようで、型の宣言のようなものということでしょうか? (2)str += document.form1.select1.options[i].value + ","; for文中で、最初の一回目は「""+あいうえお+","」、二回目は「""+あいうえお+","+かきくけこ+","」……と繰り返されていくと思うのですが、(1)の意図がわからないので、「""」の空部分の意味が理解できません。 たぶんとるに足らない疑問のような気がするのですが…… ご教授いただけるとうれしいです。 ※蛇足なんですが、for文やif文に中括弧{}がついてなくても動きはしますが、つけないのがベターなのでしょうか? (入門書籍なのでスタンダートを書いてるとは思うのですが……)

  • アクションスクリプト 外部JPGを読み込み

    下記のアクションスクリプトで外部JPGを読み込ませているのですが、IEだと1枚目のJPGが読み込まれません。 どなたか原因を教えてください! よろしくお願いします。 mcl.addListener(listener); for (var i:Number = 1; i<=Max; i++) { mcl.loadClip("img1/"+i+".jpg",_root["mc"+i } var bmcl:MovieClipLoader = new MovieClipLoader(); for (var i:Number = 1; i<=Max; i++) { /* bmcl.loadClip("img2/"+i+".jpg",_root["btn.thumb"+i]);*/ var btn:MovieClip = _root.attachMovie("btn_mc", "btn"+i, Max+i btn.id = i; bmcl.loadClip("img2/"+i+".jpg",btn.thumb

  • 可変なデータをチェックしたいのですが・・・

    いつもお世話になっております。 今回、どうしても行き詰っていることは 『事前にinsertされたデータをdbから呼び出してきて、それを変更した際に正しく入力されているか??』 ということなんですが、どしてもチェックが行えずに困っています。 また、呼び出されたデータというものが、常に変動する可能性があることから、どのように既存データ分をループして処理を行えばいいのか分からない次第です。 どなかた大変お忙しい中かとは思いますが、ご教授よろしくお願い致します。 以下が、だいぶ端折らせて頂きましたソースです。 <html> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <head> <title>sample</title> <script language="JavaScript"><!-- function s_chk() {  aaa = document.form1.elements["sat[]"].length;  for( i=0; i<aaa; i++){   var hoge = [ document.form1.elements["sat[]"][i].value ];   var flag;   flag = true;   if(!hoge[i] == "") {    if(!hoge[i].match(/^\d{4}\/\d{1,2}\/\d{1,2}$/) ){     alert("正しい日付を入力して下さい");     return false;    }    myData = hoge[i].split("/");    var vYear = myData[0] - 0;    var vMonth = myData[1] - 1;    var vDay = myData[2] - 0;    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){     var vDt = new Date(vYear, vMonth, vDay);     if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){      flag = true;     }else {      alert("正しい月日を入力して下さい");      return false;     }    }else {     alert("正しい月日を入力して下さい");     return false;    }   }  }  return flag; } // --></script> <body> <form name="form1" method="post"> <?php  for($i=0; $i<count($hoge); $i++) {   if($set_hoge[$i] == "Y") {    print "<input type='text' name='sat[]' size='13' maxlength='10' value=$hogehoge[$i]>\n";   }  } ?> <input type="button" name="sbmit" value="送信" onClick="s_chk();send()"> </form> </body> </html>

  • セレクトボックス連動

    過去の質問にありましたソースを参考にセレクトボックスの 連動タイプをphpを絡めて作っています。 DBから取出した menua に入る値を初期値に設定したいのですが うまくいきません。 menua には AAA、BBB、CCCが入ります。 初期値を変えるにはどのようにすればいいのでしょうか。 また、menua以外にもmenubの初期値も変える事が出来るのでしょうか。 以下ソースになります。 <? $menua = "BBB"; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script type="text/javascript"> <!-- data = [ ["AAA", {key:"A01",value:101}, {key:"A02",value:102}, {key:"A03",value:103}], ["BBB", {key:"B01",value:201}, {key:"B02",value:202}, {key:"B03",value:203}], ["CCC", {key:"C01",value:301}, {key:"C02",value:302}, {key:"C03",value:303}] ]; // --> </script> <script type="text/javascript"> <!-- window.onload=function (){ for(var i=0; i<data.length; i++){ document.FORM1.menua.options[i] = new Option(data[i][0],data[i][0]); } setSubMenu(0); }; function setSubMenu(no){ document.FORM1.menub.length=0; for(var i=1; i<data[no].length; i++){ document.FORM1.menub.options[i-1] = new Option(data[no][i].key,data[no][i].value); } } // --> </script> </head> <body> <form name="FORM1"> <select name="menua" onchange="setSubMenu(this.selectedIndex)"> </select> <select name="menub" > </select> </form> </body> </html>

  • ピリオド区切りで 4桁.2桁.2桁 という制限が出来なくて困っています

    ピリオド区切りで 4桁.2桁.2桁 という制限が出来なくて困っています。 テキストボックスに入力される文字列の形式を制限するために、Web上で見つけたサンプルソースを参考に、次のような形でJavascriptを挿入しました。 <script type="text/javascript"> /* ピリオドチェック */ function DotCheck() { var str = document.form01.yukoduki.value; if( str.indexOf( "." ) != 4) { alert("1234.56.78 のように、ピリオド2つで区切ってご記入下さい"); document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化; return 1; } return 0; } /* 2つめのピリオドチェック */ function DotCheck() { var str = document.form01.yukoduki.value; if( str.indexOf( "." ) != 6) { alert("1234.56.78 のように、ピリオド2つで区切ってご記入下さい"); document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化; return 1; } return 0; } /* 半角数字チェック */ function NumberCheck() { var str = document.form01.yukoduki.value; if( str.match( /[^0-9\s.]+/ ) ) { alert("半角数字と小数点のみで入力して下さい。"); document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化; return 1; } return 0; } /* 全部チェック */ function AllCheck() { var check = 0; check += NumberCheck(); check += DotCheck(); check += DotDotCheck(T); if( check > 0 ) { return false; } return true; } </script> しかし、これだと、123.456.78 のように最初のピリオドまでと2つ目のピリオドまでの桁数は制限できますが、最後の桁は何桁でも入れ放題になってしまいます。 そこで、ピリオドのチェックを2つ入れるかわりに、まとめて桁数をチェックしようと次のようなソースをソースを考えたのですが、どうも私の知識不足で間違っているようで作動しません。 /*一括ピリオドチェック */ function DotDotCheck(T) { var str = document.form01.yukoduki.value; if( !str.match(/^?d(4).?d(2).?d(2)$/)) { alert("1234.56.78 のように、ピリオド区切りで4桁.2桁.2桁でご記入下さい"); document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化; return 1; } return 0; } このソース、少し直すだけで、「ピリオド区切りで4桁.2桁.2桁になっていない場合はアラート」という目的を達成できないでしょうか? 直し方をお分かりの方がいらっしゃいましたらご教示頂きたく、どうかよろしくお願い致します。

  • リンク先のアドレス内に「?」が入っている場合の対処法

    先日、元々のリンク先から1行テキスト領域にID等を入力し各々異なる場所に飛ばす方法を教えていただきました。 そして解決したのですが、そのアドレスに「?」が入っている場合、反応しないようです・・・。 解決方法はあるのでしょうか?どなたかご教授お願いします。下記が現在組んでいるものです。 ●通常のアドレスの場合(「?」無し) ※これは成功します <script> function change(){ var change=document.getElementById("change"); var tags=document.getElementsByTagName("a"); for(var i=0;i<tags.length;i++){ var url="http://aaa.bbb.ccc/" if(tags[i].href.match(url)){ tags[i].href=url+change.value; }; } } </script> <a href="http://aaa.bbb.ccc/" target="_blank"> <img src="http://aaa.bbb.ccc/image/d.gif"></a> <input type="text" id="change"> <input type="button" value="変換" onClick="change()"> ●「?」がアドレス内にある場合 ※これは反応しません <script> function change(){ var change=document.getElementById("change"); var tags=document.getElementsByTagName("a"); for(var i=0;i<tags.length;i++){ var url="http://aaa.bbb?.ccc/" if(tags[i].href.match(url)){ tags[i].href=url+change.value; }; } } </script> <a href="http://aaa.bbb?.ccc/" target="_blank"> <img src="http://aaa.bbb.ccc/image/d.gif"></a> <input type="text" id="change"> <input type="button" value="変換" onClick="change()"> 宜しくお願いします。

  • チェックを入れて文字を表示する

    javascript初心者です。あつかましい質問で申し訳ありません。 他のページのサンプルを参考にしてチェックを入れた時はにチェックを入れると文字が表示されるチェックボックスを作成しました。更にチェックはひとつしか出来ないというjavascriptも拾ってきて組み合わせたのですが、チェックを付けてとなりにチェックを入れた時はじめに表示された文字が消えません。教えてください。 <script type="text/javascript"> var before = null; function test(e) { var tgt = e.srcElement ? e.srcElement: e.target; if (before == tgt && tgt.checkd == true) { tgt.checked = true; } else { var chks = document.getElementsByName('chkgroup'); for (var i = 0; i < chks.length; i++) { if (chks[i] != tgt) chks[i].checked = false; } } before = tgt; } <!-- function output(){ var str=""; var chkboxes=document.getElementsByName("chkgroup"); for(var i=0;i<chkboxes.length;i++){ var obj=chkboxes[i]; if (obj.checked){//チェックされていたらstrにvalue属性の文字列を追加する str+=obj.value; } } document.getElementById("result").innerHTML=str; } window.onload=function(){ var chkboxes=document.getElementsByName("chkgroup");//チェックボックス(chkgroup)を配 列で取得 for(var i=0;i<chkboxes.length;i++){//ループでチェックボックス全てにイベントハンドラを 設定 chkboxes[i].onclick=output; } }; //--> </script> <title>sample</title> <body> <form id="SAMPLE" action="#" onclick="test(event);"> <label for="chk1"><input name="chkgroup" id="chk1" type="checkbox" value="0">Item1</label> <label for="chk2"><input name="chkgroup" id="chk2" type="checkbox" value="1">Item2</label> <label for="chk3"><input name="chkgroup" id="chk3" type="checkbox" value="2">Item3</label> </form> <p id="result">ここに表示されます。</p> </body>

専門家に質問してみよう