2012-05-14 7 views
0

私は、値が約4値の1つ(以下の例では3)と一致する場合にtrueを返すjavascript関数を作成しています。問題は、私はちょうど2つの値を持っているとき、関数が正しく動作しますが、3番目を追加するとコードが壊れます。elem.value.matchを使った複数のOR演算子

私はJavaScriptには新しく、これを行うにはもっと良い方法があると思いますか?私は検索しようとしましたが、まだ何も見つかりませんでした。

ご迷惑をおかけして申し訳ありません。

function isValid(elem, helperMsg){ 

       var sn6 = /[sS][nN]6/; 
       var sn5 = /[sS][nN]5/; 
       var sn38 = /[sS][nN]38/; 

       if(elem.value.match(sn6 || sn5 || sn38)){ 
         //do stuff 
         return true; 
       }else{ 

         return false; 
       } 
      } 

編集:

はここ配列と私の第二の試みです:

function isLocal(elem, helperMsg){ 
     var validPostcodes=new Array(); 
      validPostcodes[0]= /[wW][rR]12/;  
      validPostcodes[1]= /[cC][vV]35/; 
      validPostcodes[2]= /[sS][nN]99/; 
      validPostcodes[3]= /[sS][nN]6/; 
      validPostcodes[4]= /[sS][nN]5/; 
      validPostcodes[5]= /[sS][nN]38/; 
      validPostcodes[6]= /[oO][xX]29/; 
      validPostcodes[7]= /[oO][xX]28/; 

     var i = 0; 

     for (i = 0; i < validPostcodes.length; ++i) { 
      if(elem.value.match(validPostcodes[i])){ 
        // do stuff 
        return true; 
      }else{ 
        alert(helperMsg); 
        elem.focus(); 
        return false; 
      } 
     } 
    } 

答えて

4
a || b || c 

はブールに評価される式です。つまり、match(true)またはmatch(false)のいずれかを実行しています。

match(a) || match(b) || match(c) 

別のオプションとして、配列に格納してループすることもできます。つまり、パターンの数が増えれば、パターンのリスト以外のコードを変更する必要はありません。別のアプローチは、このような状況に限られますが、一緒に3つのオプションをか-INGのと同等であるものにパターンを変更することがあるかもしれない(未テスト、そして私は正規表現上のさびビットです):

elem.value.match(/[sSnN][6|5|38]/) 

アレイベースの例:

var patterns = [/../, /.../]; 
for (var i = 0; i < patterns.length; ++i) { 
    if (elem.value.match(patterns[i])) { return true; } 
} 

実際のコードでは、私はおそらく、このようにそれをフォーマットします:

JavaScriptがその範囲の先頭に変数をホイスト以来のにちょうど習慣だ
function isValid(elem, helperMsg){ 
    var patterns = [/../, /.../], 
     i = 0; 
    for (i = 0; i < patterns.length; ++i) { 
     if (elem.value.match(patterns[i])) { 
      return true; 
     } 
    } 
} 

。そのような変数を宣言する必要は決してありません。

+0

答えをいただきありがとうございます。もう少し読んでいただき、それを解剖してみましょう。残念ながら、snで始まらない他のポストコードが存在するため、正規表現の回答は機能しません。 – user319940

+0

ああ。その場合、私はおそらく配列のアプローチに行きます。特に何かがあれば理解を助ける必要があります、私に知らせてください、私は喜んで私の答えを明確に編集します。 – Corbin

+0

ありがとう!私は次の時間にこれを試していますので、あなたの答えを知っている/受け入れるようにしてください。 – user319940

関連する問題