5

次のコードは、文字 A ~ F と数字 0 ~ 9 と 3 つのダッシュ ("-") で構成される 35 文字で構成される入力によって送信されたアイテム コードをチェックします。有効な商品コードの例: 16FA860F-E86A457B-A28A238B-2ACA6E3D

//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 であるため、ハングするだけです。何らかの方法で微調整する必要がある部分は次のとおりです。

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

2 に答える 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();
    });
}
于 2012-10-14T21:53:51.893 に答える
0

.length決してありませんnull。からの戻り値は、一致match()nullなかった場合です。その場合、プロパティを持っていないため、lengthプロパティをチェックしようとするとエラーが発生します。そのため、それをテストする必要があります (ただし、それ自体は常に次のいずれかになります)。上からの整数または)。nulllength0undefined

したがって、次のように言えます。

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();
       });
    }
}

3 未満のテストの場合、次のように言います。

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...
}

正規表現.test()メソッドは、指定された文字列が一致したかどうかに応じてtrueorを返します。false

于 2012-10-14T21:38:30.313 に答える