我正在尝试使用jQuery验证来进行一些表单验证。在表单中,我有一个用于序列号的textarea,在该textarea中,用户将粘贴一个特定格式的序列号,每行一个(比如从Excel复制)。我想循环遍历文本区域中的每一行,并验证每个序列号的格式是否正确。如果不是,抛出一个错误。如果所有序列号都签出,则允许表单提交。每个序列号的格式为XXXX-XXXX,其中X可以是任何数字或大写字母。
我已经完成了这一工作,使整个表单验证按照我所希望的方式工作,但它目前只检查序列号文本区域的一行,而不是循环遍历每一行,以找到格式不正确的Serial。
下面是表单代码(我使用的是ColdFusion,但这不重要):
<form name="requestForm" id="requestForm" method="post" action="">
<!-- Serial Numbers -->
<label for="txtSerialNumbers">Serial Numbers
<textarea name="txtSerialNumbers" id="txtSerialNumbers"></textarea>
<!-- Action Buttons -->
<button type="submit" name="addTokens" id="addTokens" >Add Tokens</button>
</form>下面是适用于一行的jQuery验证代码:
<script>
$(document).ready( function () {
$.validator.addMethod("checkSerials", function(value, element) {
if (/^[0-9A-Z]{4}(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})$/.test(value)) {
return true; // pass when validation is correct
} else {
return false; // fail when validation fails
};
}, "Please enter a valid Serial Number."
);
$('#requestForm').validate( {
rules: {
txtSerialNumbers: {
checkSerials: true
}
}
});
});
</script>我假设我需要循环,因为我不认为Regex本身可以单独检查textarea的每一行而不需要循环,或者可以吗?我仍然在学习Javascript,所以我不知道应该把循环放在哪里,或者当循环到达一个坏的序列号时如何打破循环(如果第1行发生故障,解析整个textarea没有意义)。
提前感谢您的建议!
发布于 2015-09-04 21:43:55
好吧,感谢大家的帮助。特别是,感谢斯蒂芬99%的解决方案。只是做了几次调整,结果就像我想要的那样:
$.validator.addMethod("checkSerials", function(value, element) {
var pattern = /^[0-9A-Z]{4}(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})(\-[0-9A-Z]{4})$/;
var allLines = $('#txtSerialNumbers').val().split('\n');
for (var i = 0; i < allLines.length; i++)
{
if (!pattern.test(allLines[i]))
{
return false;
}
}
return true; // pass when validation is correct
}, "Please enter a valid Serial Number."
); 发布于 2015-09-04 20:49:18
在JavaScript中,可以使用var lines = $('textarea').val().split('\n')拆分新行。这将创建一个数组(有点像一个列表),其中所有的行都是“terms”。然后,您可以执行一个for循环来遍历所有这些术语:
$.each(terms, function(index, value) {
// Do regex on value variable here for just the current line
});https://stackoverflow.com/questions/32406268
复制相似问题