以下内容检查通过由 35 个字符组成的输入提交的物料代码,该输入由字母 A-F 和数字 0-9 以及三个短划线 ("-") 组成。有效物料代码的示例如下: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/
您可以通过以某种方式使用正则表达式来修复您的代码,如下所示
/^[A-F0-9]+-[A-F0-9]+-[A-F0-9]+-[A-F0-9]+$/
其中 ^ 和 $ 匹配输入的开始和结束,以及字符组 A-F 和 0-9,约束是短划线至少由组 A-F 或 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();
});
}
.length
永远不会null
。如果没有匹配项,match()
的返回将是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...
}
正则表达式.test()
方法返回true
或false
,具体取决于提供的字符串是否匹配。