我正在使用jQuery验证插件,我已经添加了自己的规则来检查我们的事件编号。多年来,用户有多种方式键入它们,我们尝试识别任何方式。
官方格式为0123S 230813
但已知用户输入123-S 230813或123-S-230813。
它们都是有效的,但我真正想要的是官方价值。
所以我用自己的规则使用addMethod方法创建,它将验证以上所有内容并且它有效,但我真正喜欢它在顶部做的是用官方格式更新表单元素,如果是的话用户输入的内容是否正确。这就是我正在努力的目标。
下面的addMethod代码。我希望改变元素值并返回它会完成这项工作,但它似乎也没有,并且从查找this.optional(元素)这不是它的目的。
我可以这样做,或者我会更好地在表单.submit()上进行格式化,然后只验证validate插件中的正则表达式吗?
// ois incident number validator
jQuery.validator.addMethod("oisIncidentNo", function(value, element) {
var oisInc = value;
var validInc = false;
// strip spaces and dashes
oisInc = oisInc.replace(/ /g, '');
oisInc = oisInc.replace(/-/g, '');
// loop over the ois no and insert padded 0s at the front to make
// up the full correct number
if (oisInc.length<11 ){
for(i=oisInc.length; i<11; i++ )
{
oisInc='0'+oisInc;
}
}
// upper case it and put a space between the serial no and the date
oisInc=oisInc.toUpperCase();
oisInc=oisInc.substr(0, 5) + ' ' + oisInc.substr(5);
// test the regex
validInc=/[0-9][0-9][0-9][0-9][A-Z] [0-9][0-9][0-9][0-9][0-9][0-9]/.test(oisInc);
// if the incident no is valid write the properly formatted one back
if (validInc) element.val(oisInc);
return this.optional(element) || validInc;
}, jQuery.format("Please enter a valid OIS Incident No format 1234S 270813."));
答案 0 :(得分:0)
引用OP:
“我可以这样做,或者我会更好地在表单.submit()上进行格式化,然后只验证validate插件中的正则表达式吗?”
你试过吗?发生了什么事?
我没有试过这个,但是我想象一个场景,在你以编程方式更改自定义规则/方法函数中元素的值之后,它将触发另一个验证测试并进入循环。虽然你可能能够围绕任何无限递归进行编程......我只是觉得不应该这样做。
我认为简单地从用户验证表单的数据会更安全。然后在submitHandler
回调函数中,在将数据发送到服务器之前对数据进行重新分解。这更典型,IMO。当submitHandler
回调函数触发时,表单已经通过验证,因此不会发生另一个验证测试。
$(document).ready(function() {
$.validator.addMethod("oisIncidentNo", function(value, element) {
// your custom validation
}, "Please enter a valid OIS Incident No format 1234S 270813.");
$('#myform').validate({
// your rules, options, and/or callback functions,
rules: {
myField: {
oisIncidentNo: true
}
},
submitHandler: function(form) {
// re-factor any data here
// send data with an .ajax() or a form.submit()
}
});
});