2012-10-14 11 views
5

以下は、文字A〜Fと数字0〜9と3つのダッシュ( " - ")からなる35文字で入力された項目コードをチェックします。有効な項目のコードの例は、このようになります:16FA860F-E86A457B-A28A238B-2ACA6E3D長さがNULLの場合、条件を渡す必要があります

//Checks the item code to see if it meets requirements 
if($("#input").val().length > 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().length < 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too short. Be sure to include dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/([^A-Fa-f0-9-]+)/gm)) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> contains invalid characters.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else { 
//Rest of my code 
} 

次の項目コードは35文字の長さが、ないダッシュが含まれていない場合を除いて、うまく動作します。 1つまたは2つのダッシュが含まれている場合、このコードはキャッチしますが、0が含まれている場合はハングして何もしません。私はすべてを試しましたが、解決策が何であるか把握していないようです。長さがnullであるので、それは何らかの形で微調整する必要があるだけでhangs.The部分はこれです:

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

私は解決策は簡単なものであると確信しているが、私は困惑します。

編集:ここでは、CSSを除いて、すべての部分がレイアウトされています。 http://jsfiddle.net/86KcG/1/

+4

これを過度に複雑にしているように見えます。フォーマットは常に同じですか?つまり、 ' - 'は常に同じ位置にありますか? 1つの正規表現が仕事をします... –

+0

長さが35の場合、どの状態に入るべきですか? – charlietfl

+0

@マイケルはい、しかし、私はあまりいいとは思いますが、今はそれをチェックすることについてあまり心配していません。私は、コードに常に3つのダッシュがあることを確認することに焦点を当てています。もしそうでなければ、エラーメッセージを出してください。1または2しかない場合は機能しますが、存在しない場合は何もしません。 –

答えて

1

あなたは

/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/ 

^と$制約で始まりと終わり、そして文字AFのグループと0-9の入力に一致するダッシュにこのように何らかの形で正規表現を使用して、コードを修正することができますグループAFまたは0-9の少なくとも1つの文字で区切られています。

このチェックと35文字の長さチェックを組み合わせると、コードが機能します。

//Checks the item code to see if it meets requirements 
if($("#input").val().length != 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long/short.<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
else if(!(/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/.test($("#input").val()))) { 
    $("#errorLogContent").prepend("Insert some dashes and make sure the required pattern...<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
+0

これは私にとって最も効果的なものです。 nnnnnnの解決策は私にエラーを与え続けました、おそらく私のせいです。私はnnnnnnの正規表現を使用して終了しましたが。 –

0

.lengthは、nullになりません。一致しなかった場合、match()からの返信はnullとなります。nullにはプロパティがないので、lengthプロパティをチェックするとエラーが発生するため、テストする必要があります(ただし、lengthそれ自身は常に0またはundefinedの整数になります。

だからあなたが言うことができます:あなたの3未満のテストのために

else { 
    var matches = $("#input").val().match(/[-]/g); // note: match() only takes one parameter 
    if (matches != null && matches.length > 3) { 
     $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

     $("#ise").each(function(){ 
      this.reset(); 
     }); 
    } 
} 

あなたは言うだろう:

if (matches === null || matches.length < 3) 
が...何の一致が( nullのリターン)がない場合に対応するためにまたは一部の一致は3未満です。

正しい値が常に16FA860F-E86A457B-A28A238B-2ACA6E3Dのパターン、つまり8文字または数字のグループをダッシュ​​で区切っている場合は、これ:

if (!/^[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}$/i.test($("#input").val()) { 
    // invalid, do something... 
} 
true

又はfalseが指定された文字列が一致するかどうかに応じて返さ.test() method正規表現。

関連する問題