- ベストアンサー
JS条件に応じたname値の取得方法について
- 下記のセレクトボックス内で選択された値に応じて、条件に合わせたname値の取得方法について教えてください。
- 末尾が5桁の場合はjAのname値を取得します。
- 末尾が3桁の場合はjPのname値を取得し、それ以外の場合はjZのname値を取得します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>A14100 A14128 >A14128 A14000 のどちらもあるということですね? 単体の A00000 などという場合は、jAまたはjPに。 複数ある場合は、0にマッチしたとしてもjZでいいですか? var code = ""; var arr = new Array(); arr = val.split(" "); // 半角で区切る document.getElementsByName("jA").item(0).value = ""; document.getElementsByName("jP").item(0).value = ""; document.getElementsByName("jZ").item(0).value = ""; if(arr.length == 1){ // 単体の場合 (省略) } else{ // 複数存在する場合 for(var i = 0; i < arr.length; i++){ if(arr[i].match(/(0+)$/)){ code = arr[i].match(/(0+)$/)[1]; } else{code = "";} } document.getElementsByName("jZ").item(0).value = code; } という流れになると思います。 複数ある場合に、たとえば A14000 A14100 と2つ以上でマッチすることがあるかどうかもわかりませんし、あるなら、2つ以上でマッチした時の挙動が書かれていないので、とりあえず流れだけ書いておきます。
その他の回答 (4)
- mikemike7
- ベストアンサー率87% (97/111)
>例(1)・(2)のいずれもjZのパラメータを取得したいです。 0にマッチすることを前提とした質問ではないんですか? 予定外の値があるなら、予め提示するべきだと思います。 >もしアドバイスいただけるなら大変助かります。 何をどうアドバイスしたら良いかわかりません。 JavaScript的には、 var code = val.match(/(0+)$/)[1]; が var code = ""; if(val.match(/(0+)$/)){ code = val.match(/(0+)$/)[1]; } else{code = "";} となるでしょうが、0がマッチしなかった場合の挙動を提示されていないので、アドバイスしようがありません。 マッチしなかった場合に、セレクトボックスの値を、たとえば、nomatchにしたいなら、 } else { document.getElementsByName("jZ").item(0).value = code; } を } else if(code.length > 0){ document.getElementsByName("jZ").item(0).value = code; } } else { document.getElementsByName("jZ").item(0).value = "nomatch"; } などとすればいけるはずです。 何にしても、説明が曖昧すぎてアドバイスにも困ります。 0を含まなかった場合の挙動と、 複数の値がある場合、どれかの値でマッチすることがあるのか。 つまり、 A14100 A14128 もしくは A14128 A14000 というようなことがあるのかを提示するべきです。 説明するのも大変な作業とは思いますが、回答者は質問内容しか見えないわけですから。
補足
>予定外の値があるなら、予め提示するべきだと思います。 >何にしても、説明が曖昧すぎてアドバイスにも困ります。 曖昧かつ分かりにく質問大変申し訳ありませんでした。また全体像をきちんと把握してから質問すべきでした。以後気をつけさせて質問をさせて頂きたく思います。 またご回答ありがとうございます。大変恐縮です。 >0を含まなかった場合の挙動と、 >複数の値がある場合、どれかの値でマッチすることがあるのか。 >A14100 A14128 こちらのようなケースはあります。下2桁が0 もしくは下一桁が0のケースはあります。 また上記のように下2桁に関しては0以外の数値が入る場合があります。 いずれの場合も挙動はパラメータ(name)に「jZ」を設定をしたいです。 >A14128 A14000 こちらのようなに0が3つ並ぶ場合は、それ以外(0が5桁 0が2桁、0が1桁、それ以外)との組み合わせはありません。 >} else { >document.getElementsByName("jZ").item(0).value = "nomatch"; >} ご記入いただいた上記でトライしてみたいと思います。ありがとうございます。 説明が不適正で申し訳ありません。
- mikemike7
- ベストアンサー率87% (97/111)
>function setAreaCode(code) { 上記の1行を以下の2行に変更 function setAreaCode(val) { var code = val.match(/(0+)$/)[1]; でお試し下さい。
補足
早速のご回答ありがとうございます。 ご回答の通りやってみたところうまく値を取得できました!!重ねてお礼申し上げます。 ありがとうございました。 ただ、下記のような変則的な場合がございます。 例(1)・(2)のいずれもjZのパラメータを取得したいです。 例(1) 横浜市瀬谷区のように末尾まで0以外の数値が入る場合 例(2) その他横浜のように複数のvalue値を半角区切りで扱う場合(独自的な仕様) <option value="A14100">横浜市</option> <option value="A14125">横浜市瀬谷区</option> <option value="A14128 A14128">その他横浜</option> もしアドバイスいただけるなら大変助かります。どうぞよろしくお願いいたします。
- askaaska
- ベストアンサー率35% (1455/4149)
補足ありがと だとするとやっぱり "0+$"でマッチングして取得した文字列の桁数を調べるとか substringで切り取って"00000"、"000"と比較するとか すればいいと思うわ。
お礼
早速のご回答ありがとうございます。大変助かります。 アドバイスいただいたように試してみたいと思います。
- askaaska
- ベストアンサー率35% (1455/4149)
ごめん、質問がさっぱり理解できないわ。 > 下記のようなselect内で これはわかる > jsのname値 jsのname値って何? > if(code.length == 5) { このSELECTだとcodeのlengthは"@"以外は常に6になるわよね? > document.getElementsByName("jA").item(0).value = ""; これは画面のどこかにnameがjA、jP、jZのSELECTがあるっていう理解でいいのかしら? とりあえず質問文からはここまで読み取ったんだけど ここから何をしたいのか、 私が理解できていない点の補足を踏まえて 再度言ってもらえるとうれしいわ。 単にvalue値の後ろ0の数を調べたいなら "0+$"でマッチングして取得した文字列の桁数を調べるとか substringで切り取って"00000"、"000"と比較するとか すればいいと思うわ。
補足
早速のご回答ありがとうございます。 また、分かりにくい表現にて大変失礼しました。 当方かなりの初心者です。下記に補足をさせていただきました。 こちらでご理解いただくことは可能でしょうか? 過不足があればお手数ですがご指摘ください。 >jsのname値って何? パラメータになります。jA、jP、jZの3種類をoptionで選択された時に文字列の0の桁数に応じて 任意のパラメータを付与したいです。 value="A00000 →0が末尾から5つの場合パラメータはjA value="A14000 →0が末尾から3つの場合パラメータはjP それ以外はjZ という形です。 > if(code.length == 5) { > このSELECTだとcodeのlengthは"@"以外は常に6になるわよね? 大変も申し訳ありません、こちらは全く関係ないものが仮に入っております。 > document.getElementsByName("jA").item(0).value = ""; これは画面のどこかにnameがjA、jP、jZのSELECTがあるっていう理解でいいのかしら? はい、その通りです。
お礼
返信が遅くなりまして申し訳ありません。 ご回答ありがとうございます、大変助かります。 頂いた解答を元に再トライしてみたいと思います。 良いアドバイスありがとうございます。