1

我正在使用 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."));
4

1 回答 1

0

引用操作:

“那么我可以这样做吗,或者我最好只对表单进行格式化 .submit() 然后在验证插件中验证正则表达式?”

你试过了吗?发生了什么?

我没有尝试过,但我想象一个场景,在您以编程方式更改自定义规则/方法函数中元素的值之后,它将触发另一个验证测试并进入循环。尽管您可能可以围绕任何无限递归进行编程……但我只是认为不应该这样做。

我认为简单地验证用户的表单数据会更安全。然后在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()
        }
    });

});
于 2013-08-27T22:20:23.470 回答