我正在使用 jQuery 验证插件,并添加了自己的规则来检查我们的事件编号。多年来,用户输入它们的方式有很多种,我们试图识别出任何一种方式。
官方格式为0123S 230813
但已知用户输入 123-S 230813 或 123-S-230813。
它们都是有效的,但我真正想要的值是官方的。
因此,我使用 addMethod 方法创建了自己的规则,该方法将验证上述所有内容并且它可以工作,但我真正希望它在上面做的是用官方格式更新表单元素,如果用户有什么输入正确。这就是我正在努力解决的问题。
addMethod 代码如下。我希望更改元素值并返回它会完成这项工作,但它似乎也不是,并且通过查找 this.optional(element) 这不是它的目的。
那么我可以这样做吗,或者我最好只在表单上进行格式化 .submit() 然后只在验证插件中验证正则表达式?
// 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."));