5

下面检查通过由字母 AF 和数字 0-9 以及三个短划线(“-”)组成的 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,那么它就会挂起并且什么也不做。我几乎尝试了所有方法,但似乎无法弄清楚解决方案可能是什么。由于长度为空,它只是挂起。应该以某种方式调整的部分是这样的:

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 中的至少一个字符分隔的约束条件相匹配。

将此检查与 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永远不会nullmatch()如果没有匹配,则返回 from null,在这种情况下,如果您尝试检查length属性,则会收到错误,因为null没有属性,因此您需要对此进行测试(但length它本身将始终是0上或undefined) 中的整数。

所以你可以说:

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

regex.test()方法返回truefalse取决于提供的字符串是否匹配。

于 2012-10-14T21:38:30.313 回答