帮助indexOf进行自定义jquery验证规则

时间:2010-07-07 23:49:58

标签: javascript jquery-validate

前几天我在这里得到了一些很大的帮助,希望我能再次得到我需要的答案,因为我现在已经陷入困境了。我有一个具有文本输入(#USA_sub)和两个后续文本输入(#FirstName)和(#LastName)的表单我有一个验证规则,检查每个值(#FirstName)和(#LastName)是否各自出现在(#USA_sub)中。我的工作除外:当你在(#FirstName)输入中输入正确的值时,更正它包含在(#USA_sub)中你只需输入姓氏的2个字母就可以验证。如果你跳过名字,它需要所有的姓氏。

$.validator.addMethod(
    "firstSig", 
    function(value, element, params) {
        return $(params).val().indexOf(value + ' ' + $("#LastName").val()) > -1;
    }, 
    "Your first name must be contained in your Electronic Signature."
);

$.validator.addMethod(
    "lastSig", 
    function(value, element, params) {
        return $(params).val().indexOf($("#FirstName").val() + ' ' + value) > -1;
}, 
    "Your last name must be contained in your Electronic Signature."
);

和验证规则:

                                  FirstName: {
                    required: true,
                    minlength: 2,
                    firstSig: "#USA_sub"
                },
                LastName: {
                    required: true,
                    minlength: 2,
                    lastSig: "#USA_sub"
                }

谢谢!

1 个答案:

答案 0 :(得分:0)

这样做的原因是你要根据全名测试部分名称。只要目标字符串包含与测试字符串匹配的连续字符,就会有匹配。

例如:

FirstName = Bob
LastName = Dylan

USA_sub = Bob Dylan

user has typed: Bob Dyl

匹配是因为indexOf() Bob Dyl Bob Dylan ==内找到了return $(params).val() == ($("#FirstName").val() + ' ' + value);

尝试执行FirstName搜索,如:

Bo(space)

您的Bob(space)Dylan验证程序工作的原因是您最后在空间中连接。

Bob(space)中找不到Bob(space)Dylan。但FirstName

中找到了LastName

编辑:使用正则表达式测试输入开头/结尾的新版本,并消除从FirstName到LastName的交叉引用,反之亦然。

之前的版本不起作用,因为您始终在FirstName字段上验证LastNameFirstName

因此,当您切换到FirstName字段(可能为空)时,$.validator.addMethod( "firstSig", function(value, element, params) { // The regular expression represents // beginning of input + value + space var regex = new RegExp('^' + value + ' '); return regex.test($(params).val()); }, "Your first name must be contained in your Electronic Signature." ); $.validator.addMethod( "lastSig", function(value, element, params) { // The regular expression represents // space + value + end of input var regex = new RegExp(' ' + value + '$'); return regex.test($(params).val()); }, "Your last name must be contained in your Electronic Signature." ); 的验证失败,并且在您返回{FirstName之前不会重新验证{1}}。

我在下面做的是删除跨字段引用,并使用正则表达式,以便我们能够测试行的开头/结尾。基本上我们所拥有的是:

  

FirstName测试 - BeginningOfInput + FirstName + space   LastName测试 - space + LastName + EndOfInput

LastName

这样,当您输入正确的{{1}}但尚未进入{{1}}字段时,您就不会收到验证失败。