2011-06-21 14 views
1

私の検証スクリプトで問題が発生し、オーストラリアのポストコードを確認しました。 ポストコード値を含む多次元配列にはインクリメントしていないようです。ここで javascript多次元配列の複数の範囲で値を検証する

は機能だ:それだけで1000年と2599年を返しています

ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ]; 

例えば、ニューサウスウェールズ州のために

function validateAustralia(postcode, ranges) { 

      for (var i = 0; i < ranges.length; i++) { 
        console.log(i); 
//returns only 0, when it should return 0, 1, 2. 
        console.log("postcode: " + postcode + " " + "ranges: " + ranges); 
//returns postcode: 2000 ranges: 200,299,2600,2618,2900,2920 
        console.log("ranges - low: " + ranges[2][0] + " " + "ranges - high: " + ranges[2][1]); 
        //returns ranges - low: 2900 ranges - high: 2920 
       if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) { 
        valid = true; 
        //confirmation(); 
        //break; 
       } else { 
        inelegible(); 
        return false; 
       } 
      } 
    } 

- つまり、範囲[0] [0]と範囲[0 ] [1] だから、ダボの郵便番号を入力している人(ニューサウスウェールズ州にある)は、その郵便番号 - 2830 - が1000と2599の間でないため無効とみなされます。

jQuery's $ .each()は最初の配列を正しく反復処理しますが、2番目のレベルの配列から値を取得する方法がわかりません。

編集: これは深夜だったので、私は目が見えません。 以下の答えはほとんどの回答者があり、ここの友人もそれを指摘しました。最初の実行後に繰り返しを終了します。 それ以外の場合はループの外側にループし、郵便番号が範囲内にあるかどうかをテストするだけです。もしそうなら、それは有効です。有効な場合 はその後、= trueが、私は確認機能を呼び出し、他のすべては良いです:私はここに新たなんだので

function validateAustralia(postcode, ranges) { 
    for (var i = 0; i < ranges.length; i++) { 
      console.log(i); 
      // returns 0, 1, 2 ... 
      console.log("postcode: " + postcode + " " + "ranges: " + ranges); 
      // for Dubbo (2830), for example, returns postcode: 2830 ranges: 1000,2599,2619,2898,2921,2999 
      console.log("ranges - low: " + ranges[i][0] + " " + "ranges - high: " + ranges[i][1]); 
      // returns ranges - low: 1000 ranges - high: 2599, 
      //   ranges - low: 2619 ranges - high: 2898, ... 


     if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) { 
      valid = true; 
     // alert("valid =" + valid); 
     } 
     if (valid === true) { 
      confirmation(); 
      // all good 
     } else { 
      inelegible(); 
      // Sorry, mate 
     } 
    } 
} 

は、(長い時間リスナー、初めて呼び出し側が)私は自分の質問に答えることができません、それは基本的にそれです。ここで

は@nnnnnnと見たい他の誰のためのHTMLと、呼び出し側の関数です: ユーザーが選択

<select id="states" name="states"> 
    <option selected="" value="">Please choose ...</option> 
     <optgroup label="Australia" id="australia"> 
     <option value="act">Australian Capital Territory </option> 
     <option value="nsw">New South Wales </option> 
     <!-- ...and so on for the rest of the states --> 

から自分の状態を選択し、テキストボックス

<input id="postcode" name="postcode" type="text" maxlength="4" /> 
に自分の郵便番号を入力します私は以下のようなものを

postcode = $('#postcode').val(); 

を取得し、チェック

郵便番号の範囲は

function checkAustralia(state, postcode, ranges) { 
    //  has to be in the range of values 
     switch (state) { 
      //Australian states 
      //match the whole postcode 
      //postcodes with a leading '0' are validated as whole numbers without the '0' 
     case 'act': 
      ranges = [ [200, 299], [2600, 2618], [2900, 2920] ]; 
      validateAustralia(postcode, ranges); 
      break; 
     case 'nsw': 
      ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ]; 
      validateAustralia(postcode, ranges); 
      break; 
// ...and so on for the rest of the states 
+0

範囲を記録するとどうなりますか?それはあなたが期待しているものですか?あなたが1回の反復を経なければ、おそらく範囲がうまく形成されていないでしょうか? – thescientist

+1

1.あなたの関数を呼び出すコードを投稿できますか?あなたはNSWの範囲の例を挙げてきましたが、正確にどのようにそれを伝えているのかは分かりません。 2.このようなことは、サーバー側で検証されるべきではありませんか? – nnnnnn

+0

ありがとう、私は今それをカバーしていると思う。 @ thescientistそれは反復を停止した偽falseでした。 @nnnnnn 1.教育目的のために、私は呼び出し関数2を投稿します。私はそれをサーバー側でやってほしいと思っていますが、それは私たちと一緒に作業しなければならないものです:) –

答えて

1

値gainstあなたの関数は、すぐに最初の範囲がチェックされているようfalseを返します。その論理を反転する:return trueの場合はの範囲になりますが、ループが完全に使い果たされた場合のみfalseが返されます。

また、コードが明示的に値を返すとは限りません。それは明らかに問題ではありませんが、ここでの混乱に関連している可能性があります。

+0

幸治郎ありがとう、それはほとんどの答えでした。 これは深夜だったので私は盲目になりました:) –

+0

@David McKようこそ。あなたが満足している場合、正しい答えとしてマークすることを忘れないでください。 – kojiro